TWI862001B - 程式產生系統、程式產生方法、服務系統以及服務系統執行方法 - Google Patents
程式產生系統、程式產生方法、服務系統以及服務系統執行方法 Download PDFInfo
- Publication number
- TWI862001B TWI862001B TW112126083A TW112126083A TWI862001B TW I862001 B TWI862001 B TW I862001B TW 112126083 A TW112126083 A TW 112126083A TW 112126083 A TW112126083 A TW 112126083A TW I862001 B TWI862001 B TW I862001B
- Authority
- TW
- Taiwan
- Prior art keywords
- instance
- current
- service
- control unit
- instances
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 447
- 230000004044 response Effects 0.000 claims abstract description 30
- 238000010187 selection method Methods 0.000 claims abstract description 15
- 230000004083 survival effect Effects 0.000 claims abstract description 13
- 238000003672 processing method Methods 0.000 claims description 57
- 238000004891 communication Methods 0.000 claims description 51
- 238000012545 processing Methods 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 12
- 230000002045 lasting effect Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 20
- 230000008676 import Effects 0.000 description 16
- 238000004364 calculation method Methods 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 4
- 230000036541 health Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 241000334993 Parma Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000005641 tunneling Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0876—Aspects of the degree of configuration automation
- H04L41/0886—Fully automatic configuration
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/085—Retrieval of network configuration; Tracking network configuration history
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Automation & Control Theory (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Telephonic Communication Services (AREA)
- Exchange Systems With Centralized Control (AREA)
Abstract
本發明提供一種程式產生系統、方法、服務系統與服務系統執行方法。服務系統執行方法適用於服務系統,包含:由控制單元基於外部請求依序呼叫多個方法;由服務單元基於第一指示產生及運行一個實例與基於第二指示關閉前述實例;由路由單元接收當前方法的呼叫參數並執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序在對應當前方法的運行中實例中選取服務實例;以及由擴展控制單元管控所有實例的生存狀態與每隔預定時間執行擴展程序調整服務單元對應每一方法的實例數。
Description
本發明涉及微應用程序管理技術,特別涉及一種降低所需計算資源的微應用程序管理與指派技術。
傳統上,在單一應用程序中,會透過水平擴展增加更多應用程序來達到服務請求。然而,這樣的作法會消耗過多的計算資源。
有鑑於此,本發明一些實施例提供一種程式產生系統、程式產生方法、服務系統以及服務系統執行方法,以改善現有技術問題。
本發明一些實施例提供一種程式產生系統,包含至少一處理單元,前述至少一處理單元經配置以接收主程式,其中主程式包含主方法以及為一請求類型的至少一子方法,並且執行下述步驟:解析及讀取主程式內為前述請求類型的至少一子方法,並將解析及讀取後的至少一子方法的每一個套入對應的第一通訊介面功能程式碼以生成至少一生成子方法;以及解析及讀取主程式內之主方法,並將解析及讀取後的主方法以及解析及讀取後的至少一子方法的每一個套入對應的第二通訊介面功能程式碼以生成一個生成主方法。
本發明一些實施例提供一種與前述程式產生系統合作之服務系統,包含控制單元、服務單元、路由單元以及擴展控制單元;控制單元經配置以接收一外部請求,並基於該外部請求依序呼叫多個方法;服務單元經配置以基於第一指示,產生及運行一實例,以及基於第二指示關閉實例,實例對應該些方法中的一個;路由單元經配置以接收該些方法中被呼叫的當前方法的呼叫參數,並執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及當前方法的呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序,在對應當前方法的至少一運行中實例中選取服務實例;以及擴展控制單元經配置以管控服務單元所產生所有實例的生存狀態,以及每隔預定時間執行擴展程序調整服務單元對應每一方法的實例數;其中控制單元執行生成主方法,該些方法為至少一生成子方法。
本發明一些實施例提供一種服務系統,包含控制單元、服務單元、路由單元以及擴展控制單元;控制單元經配置以接收一外部請求,並基於外部請求依序呼叫多個方法;服務單元經配置以基於第一指示,產生及運行一實例,以及基於第二指示關閉實例,實例對應該些方法中的一個;路由單元經配置以接收該些方法中被呼叫的當前方法的呼叫參數,並執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及當前方法的呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序,在對應當前方法的至少一運行中實例中選取服務實例;以及擴展控制單元經配置以管控服務單元所產生所有實例的生存狀態,以及每隔預定時間執行擴展程序調整服務單元對應每一方法的實例數。
本發明一些實施例提供一種程式產生方法,由至少一處理單元執行,程式產生方法包含下述步驟:接收主程式,其中主程式包含主方法以及為一請求類型的至少一子方法;解析及讀取主程式內為請求類型的至少一子方法,並將解析及讀取後的至少一子方法的每一個套入對應的第一通訊介面功能程式碼以生成至少一生成子方法;以及解析及讀取主程式內之主方法,並將解析及讀取後的主方法以及解析及讀取的至少一子方法的每一個套入對應的第二通訊介面功能程式碼以生成一個生成主方法。
本發明一些實施例提供一種與前述程式產生方法合作之服務系統執行方法,適用於服務系統,服務系統包含控制單元、服務單元、路由單元以及擴展控制單元,服務系統執行方法包含下述步驟:由控制單元接收外部請求,並基於外部請求依序呼叫多個方法;由服務單元基於第一指示產生及運行實例,以及基於第二指示關閉實例,實例對應該些方法中的一個;由路由單元接收該些方法中被呼叫的當前方法的呼叫參數,並執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及當前方法的呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序,在對應當前方法的至少一運行中實例中選取服務實例;以及由擴展控制單元管控服務單元所產生所有實例的生存狀態,以及每隔預定時間執行擴展程序調整服務單元對應每一方法的實例數;其中控制單元執行生成主方法,該些方法為至少一生成子方法。
本發明一些實施例提供一種服務系統執行方法,適用於服務系統,服務系統包含控制單元、服務單元、路由單元以及擴展控制單元,服務系統執行方法包含下述步驟:由控制單元接收外部請求,並基於外部請求依序呼叫多個方法;由服務單元基於第一指示產生及運行實例,以及基於第二指示關閉實例,實例對應該些方法中的一個;由路由單元接收該些方法中被呼叫的當前方法的呼叫參數,並執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及當前方法的呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序,在對應當前方法的至少一運行中實例中選取服務實例;以及由擴展控制單元管控服務單元所產生所有實例的生存狀態,以及每隔預定時間執行擴展程序調整服務單元對應每一方法的實例數。
基於上述,本發明一些實施例提供一種程式產生系統、程式產生方法、服務系統以及服務系統執行方法,經由控制單元、服務單元、路由單元以及擴展控制單元的協同運作,可減少計算資源的消耗。
有關本發明之前述及其他技術內容、特點與功效,在以下配合參考圖式之實施例的詳細說明中,將可清楚的呈現。任何不影響本發明所能產生之功效及所能達成之目的修改與變更,均仍應落在本發明所揭示之技術內容涵蓋之範圍內。在所有圖式中相同的標號將用於表示相同或相似的元件。以下實施例中所提到的「連接」一詞可指任何直接或間接、有線或無線的連接手段。
圖1係依據本發明一實施例所繪示的服務系統方塊圖。請參閱圖1,服務系統100包含控制單元101、服務單元103、路由單元102以及擴展控制單元104。控制單元101經配置以接收外部請求,並基於外部請求依序呼叫多個方法:方法1、方法2至方法M,其中M為一正整數。值得說明的是,控制單元101可同時接受不同使用者所產生的外部請求,並對應不同使用者所產生的外部請求平行地呼叫方法1、方法2至方法M。服務單元103經配置以基於第一指示,產生及運行一實例,以及基於第二指示關閉前述實例,實例對應前述方法1、方法2至方法M中的一個以使得實例可執行對應的方法。以圖1所繪示的例子來說,服務單元103產生及運行實例1031-1~1031-N、實例1032-1~1032-O以及實例1033-1~1033-P,其中N、O以及P為整數。實例1031-1~1031-N對應前述方法1,實例1032-1~1032-O對應前述方法2以及實例1033-1~1033-P對應前述方法M。因此,實例1031-1~1031-N的每一個可以執行方法1,實例1032-1~1032-O的每一個可以執行方法2以及實例1033-1~1033-P的每一個可以執行方法3。服務單元103可基於第二指示關閉前述實例1031-1~1031-N、實例1032-1~1032-O以及實例1033-1~1033-P,每一個方法的實例可關閉到零個,也就是說,可能有方法目前是沒有對應的實例在服務單元103上執行。
在本發明的一些實施中,每一個實例皆被配置有一組唯一的IP位置(Internet Protocol Address,IP Address)以及通訊埠(port)。例如實例1031-1被配置的IP位置為10.1.10.101,通訊埠為9999,整體被表示為10.1.10.101:9999。並且每個實例具有兩個端口:指標端口以及方法端口。訪問實例的指標端口可獲得實例的資源資訊,在本發明一些實施例中,資源資訊包含:實例在哪台實體機器上運行、實例所被分配到的IP位置以及通訊埠、實例所要執行之函式類型、實例當下中央處理單元(Central Processing Unit,CPU)負載程度以及實例目前的健康程度。訪問實例的方法端口可獲得實例對應方法的運算結果。前述指標端口以/metric表示,前述方法端口以/method表示,以前述實例1031-1為例,訪問「http://10.1.10.101:9999 /metric」可以獲得實例1031-1的資源資訊,訪問「http://10.1.10.101:9999 /method」可以獲得實例1031-1所對應方法1執行的運算結果。
在本實施例中,前述實例的資源資訊以「鍵:值」的儲存格式儲存。實例在哪台實體機器上運行的「鍵」為"hostname", 實例所被分配到的IP位置以及通訊埠的「鍵」為"ipport",實例所要執行之函式類型的「鍵」為"category",實例當下中央處理單元負載程度的「鍵」為"cpu_load"以及實例目前的健康程度的「鍵」為"instance_status"。
圖2-1係依據本發明一些實施例所繪示的實例-路由單元示意圖。請參閱圖2-1,訪問實例201後,獲得實例201的資源資訊:
{
"hostname ": "hostname1 ",
"ipport ": "10.1.10.101:9999 ",
"category ": "method1 ",
"cpu_load ": "50% ",
"instance_status ": "ok ",
}
表示實例在名稱為hostname1的實體機器上運行, 實例所被分配到的IP位置以及通訊埠為10.1.10.101:9999,實例所要執行之函式類型為method1,其中method1為方法1的名稱,實例當下中央處理單元負載程度為50%以及實例目前的健康程度為ok。
當前述方法1、方法2至方法M在控制單元101依序被呼叫,控制單元101對於當前被呼叫的當前方法(例如方法1),會將當前方法的請求類型(例如是方法1、方法2或是其他方法)以及請求參數(例如是當前方法的輸入參數)作為呼叫參數傳送給路由單元102,以請求路由單元102轉發給服務單元103中對應當前方法的請求類型的實例。路由單元102接收到前述請求後,再轉發到服務單元103中對應當前方法的請求類型的實例。在本實施例中,方法1以字串"method1"代表,方法2以字串"method2"代表,以此類推。請求類型以及請求參數以「鍵:值」的方式儲存及傳遞,鍵"category"代表請求類型,其對應的值可以是字串"method1"、字串"method2"或其他代表方法的字串。鍵"args"代表請求參數。舉例來說,{"category": "method1", " params ":[method1-arg1, method1-arg2]}表示傳送給路由單元102的請求類型為方法1,並且方法1的輸入參數為method1-arg1以及method1-arg2。
路由單元102會從擴展控制單元104獲得對應當前方法(例如方法1)的運行中的實例的IP位置以及通訊埠。由於服務單元103可能在當下並沒有對應當前方法(例如方法1)的運行中的實例,也就是對應當前方法的實例數為零,此時路由單元102會記錄當前方法的請求以及當前方法的呼叫參數。如前所述,控制單元101可同時接受不同使用者所產生的外部請求,並對應不同使用者所產生的外部請求平行地呼叫方法1、方法2至方法M。因此同一時間,可能會有好幾個對應不同使用者的方法1請求沒有對應的運行中的實例。在本發明一些實施例中,路由單元102會以「鍵:值」的方式記錄及儲存哪些請求類型的方法當下並沒有運行中的實例以及其這些沒有運行中的實例的方法數量以記錄當前方法的請求。鍵"category"代表請求類型,鍵"inflight_request"代表有這個請求類型有多少請求數量在當下沒有對應的運行中的實例。舉例來說,下述表(一):
{
{
"category": "method1",
"inflight_request":1,
},
{
"category": "method2",
"inflight_request":0,
},
{
"category": "method3",
"inflight_request":0,
},
}
表(一)
代表方法1有1個請求在當下沒有對應的運行中的實例,方法2及方法3有0個請求在當下沒有對應的運行中的實例。值得說明的是,方法2及方法3有0個請求在當下沒有對應的運行中的實例並不表示在當下服務單元103具有對應方法2或方法3的實例,而是有可能在當下控制單元101沒有傳送方法2或是方法3的請求,或者是對於控制單元101所傳送過來關於方法2及方法3的請求,路由單元102都有找到對應的實例。
路由單元102具有兩個端口,指標端口以及轉發端口。控制單元101經由路由單元102的轉發端口將當前方法的呼叫參數(請求類型以及請求參數(例如是當前方法的輸入參數))傳送給路由單元102。並且如圖2-1所繪示,訪問路由單元102的指標端口可獲得前述表(一)以得知那些方法有請求卻沒有對應的實例。
路由單元102具有一儲存空間儲存表(一)。當路由單元102接受到控制單元101所傳送當前方法的請求後,路由單元102會從擴展控制單元104獲得對應當前方法(例如方法1)的運行中的實例的IP位置以及通訊埠,若對應當前方法的實例數為零,路由單元102記錄當前方法的呼叫參數,以及路由單元102會更新表(一)以記錄當前方法的請求。若對應於對應當前方法的實例數為非零,路由單元102基於選取程序,在對應當前方法的運行中實例中選取服務實例以執行當前方法。
在本發明一些實施例中,路由單元102以HTTP Proxy伺服器(HTTP Reverse Proxy Server)實現。例如,可以使用下述Python程式碼(http-reverse-proxy.py)實現:
import json
import requests
from http.server import BaseHTTPRequestHandler,HTTPServer
from typing import Dict
method_and_instance_ips = {
'method1' : [ '10.1.10.101:9999' , '10.1.10.102:9999' , '10.1.10.105:9999' ],
'method2' : [ '10.1.10.103:9999' , '10.1.10.104:9999' ],
'method3' : [],
}
def get_method_from_body(json_body: Dict):
return json_body[ 'category' ]
def pick_one(instance_ips: [ str ]) -> str :
# in this example, we only pick the first one
return instance_ips[ 0 ]
def get_method_ips_or_wait(method: str ) -> str :
if method in method_and_instance_ips and len (method_and_instance_ips[method]) > 0 :
return pick_one(method_and_instance_ips[method])
else :
import time
time.sleep( 1 )
return get_method_ips_or_wait(method)
class ProxyHTTPRequestHandler(BaseHTTPRequestHandler):
def __init__(self, port= 9999 ):
self.port = port
def do_POST(self, body=True):
if self.path == '/proxy' :
return self.do_proxy(self, body)
def do_proxy(self, body=True):
content_len = int (self.headers.getheader( 'content-length' , 0 ))
post_body = self.rfile.read(content_len)
post_body_json = json.load(post_body)
destination_ip = get_method_ips_or_wait(get_method_from_body(post_body_json))
url = 'http://{}/method' . format (destination_ip)
req_body = { 'parmas' : post_body_json[ 'params' ]}
req_header = self.parse_headers()
resp = requests.post(url, data=req_body, headers=req_header)
# forward response body and header to the actual client
self.send_response(resp.status_code)
self.send_resp_headers(resp)
if body:
self.wfile.write(resp.content)
return
def parse_headers(self):
req_header = {}
for line in self.headers:
line_parts = [o.strip() for o in line.split( ':' , 1 )]
if len (line_parts) == 2 :
req_header[line_parts[ 0 ]] = line_parts[ 1 ]
return req_header
def send_resp_headers(self, resp):
respheaders = resp.headers
for key in respheaders:
self.send_header(key, respheaders[key])
self.send_header( 'Content-Length' , len (resp.content))
self.end_headers()
def serve(self):
httpd = HTTPSever(( '0.0.0.0' , self.port), self)
httpd.serve_forever()
ProxyHTTPRequestHandler().serve()
圖2-2係依據本發明一些實施例所繪示的控制單元-路由單元運作示意圖。請參閱圖2-2,在圖2-2所繪示的方法中,前述M值為3,控制單元101接收外部請求,並基於外部請求依序呼叫方法1、方法2。如圖2-2所繪示,當控制單元101呼叫方法1時,當前方法為方法1,控制單元101將當前方法的請求類型(目前是方法1)以及請求參數(在此實施例中以「鍵:值」的方式儲存及傳遞,鍵category代表請求⽅法類型,其對應的值是字串(string),字串的內容為當前⽅法的請求名稱,如圖2-2所繪⽰method1。鍵params代表請求參數,其對應的值是串列(list),串列的內容為當前方法的請求參數,如圖2-2所繪示[input11, input12])作為呼叫參數傳送給路由單元102,以請求路由單元102依據鍵category值為method1轉發給服務單元103中對應當前方法的請求類型的實例,當對應當前方法的請求類型的實例執行完後,再將運算結果透過路由單元102回傳給控制單元101,在此實施例中以「鍵:值」的方式儲存及傳遞,鍵outputs代表運算結果,其對應的值是串列(list),串列的內容為運算結果,如圖2-2所繪示outputs:[output11]。值得說明的是,若當前方法沒有要回傳的運算結果時,其對應的值可為空串列(empty list)。
當控制單元101收到對應方法1的請求類型的實例的回傳後,當控制單元101依序再呼叫方法2,與前述方法1相同的流程,控制單元101將方法2的請求類型(目前是方法2,如圖2-2所繪⽰category:method2)以及請求參數(如圖2-2所繪示params:[input21, input22])作為呼叫參數傳送給路由單元102,以請求路由單元102轉發給服務單元103中對應當前方法的請求類型的實例,當對應當前方法的請求類型的實例執行完後,再將運算結果(outputs: [output21])透過路由單元102回傳給控制單元101。
擴展控制單元104經配置以管控服務單元103所產生所有實例的生存狀態,以及每隔預定時間執行擴展程序調整服務單元103中對應方法1、方法2至方法M每一個的實例數。
以下即配合圖式詳細說明本發明一些實施例之服務系統執行方法以及服務系統100之各模組之間如何協同運作。
圖12係依據本發明一些實施例所繪示的服務系統執行方法流程圖。請同時參閱圖1、圖2-1~圖2-2以及圖12,在圖12所繪示的實施例中,服務系統執行方法包含步驟S1201至S1204。在步驟S1201中,由控制單元101接收外部請求,並基於外部請求依序呼叫多個方法(例如前述方法1、方法2至方法M)。在步驟S1202中,由服務單元103基於第一指示產生及運行實例,以及基於第二指示關閉前述實例,前述實例對應前述多個方法中的一個。在步驟S1203中,由路由單元102接收前述方法中被呼叫的當前方法的呼叫參數,並由路由單元102執行:響應於對應當前方法的實例數為零,記錄當前方法的請求以及當前方法的呼叫參數;響應於對應當前方法的實例數為非零,基於選取程序,在對應當前方法的至少一個運行中實例中選取一個服務實例以執行當前方法。以及在步驟S1204中,由擴展控制單元104管控服務單元103所產生所有實例的生存狀態,以及每隔一預定時間執行擴展程序調整服務單元103對應每一個方法的實例數。
在本發明一些實施例中,擴展控制單元104包含位置-通訊埠列表,前述位置-通訊埠列表包含每一個方法當前在服務單元103上運行中的實例的IP位置以及通訊埠。並且,前述位置-通訊埠列表以字串串列(string list)的方式實現。例如下述位置-通訊埠列表:
method1=["10.1.10.101:9999", "10.1.10.102:9999",
"10.1.10.105:9999"]
method2=["10.1.10.103:9999", "10.1.10.104:9999 "]
method3=[]
表示方法1當前在服務單元103上有3個運行中的實例,這3個運行中實例的IP位置及通訊埠分別為10.1.10.101:9999、10.1.10.102:9999以及10.1.10.105:9999;方法2當前在服務單元103上有2個運行中的實例,這3個運行中實例的IP位置及通訊埠分別為10.1.10.103:9999以及10.1.10.104:9999;方法3當前在服務單元103沒有運行中的實例。
在本發明一些實施例中,位置-通訊埠列表以前述實施例所記載方式實施,前述選取程序包含:在前述位置-通訊埠列表上,在對應當前方法的至少一運行中實例中,選取排在第一位置的第一位置運行中實例作為服務實例。舉例來說,當前方法為方法1,則對應方法1的運行中實例中,排在第一位置的第一位置運行中實例為IP位置及通訊埠為10.1.10.101:9999的實例,因此路由單元102選取IP位置及通訊埠為10.1.10.101:9999的實例作為服務實例以執行當前方法。
在本發明一些實施例中,位置-通訊埠列表以前述實施例所記載方式實施,前述選取程序包含:在一位置-通訊埠列表上,以循環的方式在一個指示位置後選取對應當前方法的下一位置運行中實例作為服務實例,並將指示位置指向服務實例。舉例來說,當前方法為方法1,指示位置為2(表示指示位置指向IP位置及通訊埠為10.1.10.102:9999的實例),則路由單元102選取下一位置運行中實例作為服務實例,也就是IP位置及通訊埠為10.1.10.105:9999的實例,並將指示位置指向服務實例,也就是把指示位置設為3。前述「循環的方式」表示,由於現在指示位置為3,當路由單元102要再選取服務實例時,指示位置後的實例為IP位置及通訊埠為10.1.10.101:9999的實例,也就是再回到排序第一個的實例。
圖13係依據本發明一些實施例所繪示的選取程序流程圖。請參閱圖13,在本發明一些實施例中,位置-通訊埠列表以前述實施例所記載方式實施,前述選取程序包含步驟S1301以及步驟S1302。在步驟S1301中,路由單元102針對所有對應當前方法的至少一運行中實例,依據位置-通訊埠列表所記載對應當前方法的至少一運行中實例的每一個的指標端口,獲得對應當前方法的至少一運行中實例的每一個的運行指標。在步驟S1302中,路由單元102選取對應當前方法的至少一運行中實例中具有最小運行指標的最小運行指標實例作為服務實例。
舉例來說,當前方法為方法1,前述運行指標選為中央處理單元負載指標,即實例的中央處理單元負載程度。路由單元102針對所有對應方法1的運行中實例(在此為IP位置及通訊埠為10.1.10.101:9999,10.1.10.102:9999以及 10.1.10.105:9999的3個實例),依據位置-通訊埠列表所記載對應當前方法的至少一運行中實例的每一個的指標端口/metric,即以訪問http://10.1.10.101:9999/metric、http://10.1.10.102:9999/metric以及http://10.1.10.105:9999/metric獲得對應方法1的至少一運行中實例的每一個的運行指標(在此為中央處理單元負載指標)。在步驟S1302中,路由單元102選取對應當前方法的至少一運行中實例中具有最小運行指標的最小運行指標實例作為服務實例。舉例來說,如果IP位置及通訊埠為10.1.10.101:9999的實例的中央處理單元負載指標為50%,IP位置及通訊埠為10.1.10.102:9999的實例的中央處理單元負載指標為30%,IP位置及通訊埠為10.1.10.105:9999的實例的中央處理單元負載指標為10%,則最小運行指標為10%,最小運行指標實例為IP位置及通訊埠為10.1.10.105:9999的實例。
圖14係依據本發明一些實施例所繪示的擴展程序流程圖。請同時參閱圖1以及圖14,在圖14所繪示的實施例中,擴展控制單元104每隔一預定時間(例如1分鐘),依照前述方法的一個順序(例如可以是方法1、方法2…方法M),針對前述方法中的每一個執行步驟S1401以及S1402。現在輪到的方法被稱為當前方處理方法。在步驟S1401中,響應於對應於當前處理方法的實例數為零並且路由單元102中所記載對應於當前處理方法的請求數量為非零,新增對應於當前處理方法的第一新增實例。舉例來說,當前方處理方法為方法3,擴展控制單元104經由前述位置-通訊埠列表確認是否有對應於當前處理方法的實例數為零並且路由單元102中前述表(一)所記載對應於當前處理方法的請求數量為非零,擴展控制單元104響應於對應於當前處理方法的實例數為零並且路由單元102中所記載對應於當前處理方法的請求數量為非零,對服務單元103發出前述第一指示以新增對應於當前處理方法(在此例子中為方法3)的第一新增實例。
在步驟S1402中,響應於對應於當前處理方法的實例數為非零以及對應於當前處理方法的所有當前處理方法實例的平均運行指標大於第一指標預設值且持續時間大於第一預定時間,新增對應於當前處理方法的第二新增實例。舉例來說,當前方處理方法為方法1,運行指標選為中央處理單元負載指標,平均運行指標為平均中央處理單元負載指標,亦即對應於當前處理方法的所有當前處理方法實例的中央處理單元負載指標的平均。擴展控制單元104經由前述位置-通訊埠列表確認於對應於當前處理方法的實例數是否為非零,若是非零,則擴展控制單元104再藉由位置-通訊埠列表,獲得對應當前處理方法(在此例子中為方法1)的每一運行中實例(例如前述IP位置及通訊埠為10.1.10.101:9999,10.1.10.102:9999以及 10.1.10.105:9999的3個實例),前述對應當前處理方法(在此例子中為方法1)的每一運行中實例又稱為當前處理方法實例。擴展控制單元104再藉由當前處理方法實例的每一個的IP位置、通訊埠以及指標端口,獲得對應當前方法(方法1)的運行中實例的每一個的運行指標(在此例子中為中央處理單元負載指標),例如是20%、30%以及10%,擴展控制單元104平均所獲得的運行指標(在此例子為:(20%+30%+10%)/3=20%)以作為對應於當前處理方法(方法1)的所有當前處理方法實例的平均運行指標。若平均運行指標大於第一指標預設值(例如10%)且持續時間大於第一預定時間(例如1分鐘),擴展控制單元104對服務單元103發出前述第一指示以新增對應於當前處理方法(方法1)的第二新增實例。
值得說明的是,前述步驟S1401以及S1402的判斷順序是可以交換的,本發明並不以S1401至S1402的順序為限。
圖15係依據本發明一些實施例所繪示的擴展程序流程圖。在圖14所繪示的實施例中,擴展控制單元104每隔一預定時間(例如1分鐘),依照前述方法的一個順序(例如可以是方法1、方法2…方法M),針對前述方法中的每一個執行步驟S1501至S1506。在步驟S1501中,擴展控制單元104確認對應於當前處理方法的實例數。在步驟S1502中,若擴展控制單元104判斷實例數大於1,則執行步驟S1503,若否,則執行步驟S1504。在步驟S1503中,擴展控制單元104再確認對應於當前處理方法的所有當前處理方法實例的平均運行指標是否小於第二指標預設值且持續時間大於第二預定時間。若是,則執行步驟S1505。在步驟S1505中,擴展控制單元104選取當前處理方法實例中一個待關閉的待關閉實例(為了說明方便,稱為第二待關閉實例),並且對服務單元103發出前述第二指示以關閉第二待關閉實例。
在步驟S1504中,擴展控制單元104再確認對應於當前處理方法的實例數是否為1、路由單元102中所記載對應於當前處理方法的請求數量為是否為零以及對應於當前處理方法的所有當前處理方法實例的平均運行指標小於第二指標預設值且持續時間大於第二預定時間。若確認皆是,則執行步驟S1506。在步驟S1506中,擴展控制單元104關閉對應於當前處理方法的實例(為了說明方便,稱為第一待關閉實例)以使對應於當前處理方法的實例數為零。
舉例來說,當前方法為方法1,平均運行指標為所有當前處理方法實例的運行指標的平均。前述運行指標選為中央處理單元負載指標,即實例的中央處理單元負載程度。第二指標預設值設為10%,第二預定時間設為1分鐘。在步驟S1501以及S1502中,由於對應方法1的運行中實例有: IP位置及通訊埠為10.1.10.101:9999,10.1.10.102:9999以及 10.1.10.105:9999等3個實例,因此執行步驟S1503。在步驟S1503中,擴展控制單元104針對所有對應方法1的運行中實例(在此為IP位置及通訊埠為10.1.10.101:9999,10.1.10.102:9999以及 10.1.10.105:9999的3個實例),依據位置-通訊埠列表所記載對應當前方法的至少一運行中實例的每一個的指標端口/metric獲得對應方法1的至少一運行中實例的每一個的運行指標(在此為中央處理單元負載指標)例如是9%、9%以及9%。擴展控制單元104獲得平均運行指標為9%。擴展控制單元104確認平均運行指標(9%)小於第二指標預設值(10%)且持續時間大於第二預定時間(1分鐘),因此擴展控制單元104執行步驟S1505。在步驟S1505中,擴展控制單元104選取當前處理方法實例中的第二待關閉實例(例如是IP位置及通訊埠為10.1.10.101:9999的實例),並且對服務單元103發出前述第二指示以關閉第二待關閉實例。
圖16係依據本發明一些實施例所繪示的擴展程序流程圖。在圖16所繪示的實施例中,對應於當前處理方法的所有當前處理方法實例的每一個為一容器(container)。前述步驟S1505包含執行步驟S1601至步驟S1607以選取當前處理方法實例中的第二待關閉實例。在步驟S1601中,擴展控制單元104確認對應於當前處理方法的所有當前處理方法實例是否有未完成初始化的未初始化實例。在步驟S1602中,若判斷存在未初始化實例,則執行步驟S1603,若否,則執行步驟S1604。在步驟S1603中,擴展控制單元104選取未初始化實例作為第二待關閉實例。在步驟S1604中,擴展控制單元104確認對應於當前處理方法的所有當前處理方法實例是否有尚未運行的未運行實例。
在步驟S1605中,若判斷存在未運行實例,則執行步驟S1606,若否,則執行步驟S1607。在步驟S1606中,擴展控制單元104選取該未運行實例作為該第二待關閉實例。在步驟S1607中,擴展控制單元104選取對應於當前處理方法的所有當前處理方法實例中運行時間最短的最短運行實例作為第二待關閉實例。
圖3係依據本發明一實施例所繪示的擴展控制單元方塊圖。圖4至圖6係依據本發明一些實施例所繪示的擴展控制單元運作示意圖。圖17係依據本發明一些實施例所繪示的服務系統執行方法流程圖。請同時參閱圖3、圖4至圖6以及圖17,在本發明一些實施例中,擴展控制單元104包含儲存協調元件1041以及水平擴展元件1042。水平擴展元件1042經配置以執行前述圖14所記載步驟S1401至步驟S1402,圖15所記載步驟S1501至步驟S1506,以及圖16所記載步驟S1601至步驟S1607。儲存協調元件1041經配置以包含鍵值存放空間。服務系統執行方法更包含步驟S1701至步驟S1704(步驟S1701至步驟S1704稱為管控程序)。
在步驟S1701中,由實例在產生後將自身之鍵資料以及值資料註冊至儲存協調元件1041。在步驟S1702中,由儲存協調元件1041將註冊時間做為實例之生存時間並該實例之鍵資料、值資料以及生存時間存入鍵值存放空間。以圖4所繪示的例子來說明,實例401產生後具有自身之鍵資料以及值資料如下:
{
"key": "method 1",
"value": "{
"category": "method 1",
"hostname": "hostname1",
"ipport": "10.1.0.1:9999",
"instance_status": "ok",
}",
}
其中鍵資料有鍵"key"以及鍵"value", 對應鍵"key"的值代表實例401對應那一個方法,在此例子中,對應鍵"key"的值為"method 1",因此實例401對應方法1。鍵"value"所對應的值為實例401的資源資訊,在此例子中實例401的資源資訊以json string表示為:
{
\"category\": \"method 1\",
\"hostname\": \"hostname1\",
\"ipport\": \"10.1.0.1:9999\",
\"instance_status\": \"ok\",
}
資源資訊的內容已詳述如前,在此不再贅述。
請再參閱圖4,鍵值存放空間包含3個欄位。第一個欄位儲存實例對應鍵"key"的值(在此例子中為"method 1")。第二個欄位儲存實例的生存時間,當實例一開始註冊時,儲存協調元件1041將註冊時間做為實例之生存時間,在此例子中為123456789。第三個欄位儲存實例對應鍵"value"的值,也就是實例的資源資訊。在此實施例中,圖4中所繪示<json-string>表示對應鍵"value"的值是以json string的格式儲存。並可以用程式碼:json.dumps(values)實作,以將整個資源資訊序列化為json格式的資料。
在步驟S1703中,由實例(例如實例401)定時更新其生存時間。舉例來說,實例401每3秒更新,在這例子中,一開始的生存時間為前述註冊時間123456789,下一次更新時會是
。在步驟S1704中,由儲存協調元件1041定時基於現在時間以及生存時間,確認實例是否需被清除以管控實例的生存狀態,以及響應於實例需被清除,清除實例並且通知路由單元102以及水平擴展元件1042。請參閱圖5,在本發明一些實施例中,儲存協調元件1041比對現在時間以及實例的生存時間。若生存時間小於現在時間,則確認實例需被清除,儲存協調元件1041直接清除鍵值存放空間中關於這個實例的資料以管控實例的生存狀態。以圖5所繪示實施例為例,現在時間是123456790,因此對應「"method 1",123456789, "{\"category\":\"method 1\",\"hostname\" : \"hostname1\", \"ipport\" : \"10.1.0.1:9999\", \"instance_status\" : \"ok\" }"」的實例的生存時間123456789小於現在時間,儲存協調元件1041確認這個實例需被清除,因此清除這個實例,如圖5所繪示。對應「"method 1", 123456792, "{\"category\" : \"method 1\", \"hostname\" : \"hostname1\", \"ipport\" : \" 10.1.0.2:9999 \", \"instance_status\" : \"ok\" } "」以及對應「"method 3", 123456791, "{\"category\" : \"method 3\", \"hostname\" : \"hostname1\", \"ipport\" : \" 10.1.2.1:9999\", \"instance_status\" : \"ok\"}"」的實例則保留。
請再參閱圖6,在本發明一些實施例中,水平擴展元件1042以及路由單元102會儲存一份與儲存協調元件1041的鍵值存放空間內容相同的鍵值存放空間內容,當儲存協調元件1041的鍵值存放空間有變動時,儲存協調元件1041通知路由單元102以及水平擴展元件1042以更新各自的鍵值存放空間內容,如圖6所繪示。
圖7至圖9係依據本發明一些實施例所繪示的服務系統實施方式示意圖。請先參閱圖7,場域901、場域902、場域903、場域904以及場域905各別可為一單一電腦、單一工作站或物聯網內的一微裝置(micro device)。在此實施例中,連接通道908為網路(network),網路可由實體網路以及虛擬網路所構成(使⽤虛擬網路的話需要將該虛擬網路與實體網路進⾏端口映射(Port-mapping),常⾒的做法有如ssh tunneling或容器化應⽤可使⽤dockerhost network等⽅式實現)。場域901至場域905彼此經由連接通道908並以HTTP作為介面進行溝通與資料傳遞。在圖7所繪示的實施例中,控制單元101實施於場域901中,路由單元102實施於場域902,擴展控制單元104實施於場域904,控制單元101、路由單元102以及擴展控制單元104可以軟體方式或以硬體方式實施於各場域。服務單元103由場域903以及場域905所組成。對應方法1的實例906為一容器並執行於場域903中,對應方法2的實例907為一容器並執行於場域903中。
值得說明的是,在圖7所繪示的實施例中,由於服務單元103由場域903以及場域905所組成。因此服務系統100一開始執行時並不需要同時喚醒場域903以及場域905,可以當有需要在場域中產生實例時,再以區域網路喚醒(Wake on Local Area Network,Wake on Lan)技術或者是廣域網路喚醒(Wake on Wide Area Network,Wake on Wan)技術喚醒需要執行實例的場域。例如,服務系統100一開始執行時先喚醒場域903,並在場域903執行實例906。其後當需要時,在場域903上繼續增加實例(如以遠端命令列的方式增加運行容器 docker run xxxx,或是透過k8s的方式增加透過修改replicaset的數量來增加)。而當沒有實例在執行時,可以先關閉沒有執行實例的場域。例如當場域905上的實例都被關閉時,可以關閉場域905以節省電能。
請參閱圖8,在本發明一些實施例中,控制單元101、路由單元102、服務單元103以及擴展控制單元104皆實施於場域901中,並且連接通道908為網路(network),控制單元101、路由單元102、服務單元103以及擴展控制單元104彼此經由連接通道908並以HTTP作為介面進行溝通與資料傳遞。服務單元103所產生的實例為容器,對應方法1的實例906以及對應方法2的實例907皆執行於場域901中,對應方法1的實例906以及對應方法2的實例907與控制單元101、路由單元102、服務單元103以及擴展控制單元104彼此也經由連接通道908並以HTTP作為介面進行溝通與資料傳遞。
請再參閱圖8,在本發明一些實施例中,控制單元101、路由單元102、服務單元103以及擴展控制單元104皆實施於場域901中,服務單元103所產生的實例為行程(process),控制單元101透過os.CreareProcess等應用程式介面(Application Programming Interface,API)或是遠端程序呼叫(Remote Procedure Call,RPC)來產生實例。對應方法1的實例906以及對應方法2的實例907皆執行於場域901中。並且連接通道908為網路或是網路插座(socket)或是混合網路及網路插座,控制單元101、路由單元102、服務單元103、擴展控制單元104、對應方法1的實例906以及對應方法2的實例907彼此經由連接通道908進行溝通與資料傳遞。
在本發明一些實施例中,控制單元101、路由單元102、服務單元103以及擴展控制單元104的部分實施於單一場域中。請參閱圖9,以圖9所繪示的實施例為例,控制單元101以及路由單元102實施於場域901中,連接通道909為網路或是網路插座,控制單元101以及路由單元102彼此經由連接通道909進行溝通與資料傳遞。擴展控制單元104實施於場域903,服務單元103由場域902以及場域904所組成,場域902為一微裝置,場域904為一單一電腦。對應方法1的實例906為場域902的微裝置功能程式,對應方法2的實例907為一容器並執行於場域904中。當擴展控制單元104要建立實例906時,擴展控制單元104以區域網路喚醒技術或者是廣域網路喚醒技術喚醒場域902並執行實例906。擴展控制單元104以前述增加運行容器方式產生實例907。連接通道908為網路,場域902、場域903、場域904、對應方法1的實例906以及對應方法2的實例907彼此經由連接通道908進行溝通與資料傳遞。連接通道908與連接通道909彼此訊號連接使得控制單元101以及路由單元102能與擴展控制單元104、實例906以及實例907進行溝通與資料傳遞。
前述服務系統實施方式可整理成下表(二)。
表(二)
| 場域 | 電腦集群 | 單一電腦 | 單一電腦 | 物連網裝置 |
| 溝通方式 | 網路 | 網路 | 網路或是網路插座或是混合網路及網路插座 | 網路 |
| 實例實施方式 | 容器 | 容器 | 行程 | 微裝置 |
| 可實施單元 | 控制單元101、服務單元103、路由單元102以及擴展控制單元104 | 控制單元101、服務單元103、路由單元102以及擴展控制單元104 | 控制單元101、服務單元103、路由單元102以及擴展控制單元104 | 控制單元101、服務單元103、路由單元102以及擴展控制單元104 |
| 擴展程序實施方式 | 增加電腦以及實例 | 增加實例 | 增加實例 | 區域網路喚醒技術或者是廣域網路喚醒 |
| 溝通介面 | Http | Http | Http以及網路插座 | Http |
圖10係依據本發明一實施例所繪示的程式產生系統方塊圖。請參閱圖10,程式產生系統700包含處理單元701-1、701-2至701-R,其中,R為正整數。內部記憶體702以及非揮發性記憶體703。內部記憶體702例如是隨機存取記憶體 (Random - Access Memory, RAM)。非揮發性記憶體(non-volatile memory)703例如是至少1個磁碟記憶體等。內部記憶體702和非揮發性記憶體703,用於存放程式以及資料,程式可以包括程式碼,程式碼包括電腦操作指令。內部記憶體702和非揮發性記憶體703向處理單元701-1至701-R提供指令和資料。處理單元701-1至701-R從非揮發性記憶體中703讀取對應的電腦程式到內部記憶體702中然後運行。
以下即配合圖式詳細說明本發明一些實施例之程式產生方法以及程式產生系統700之各模組之間如何協同運作。
圖11係依據本發明一實施例所繪示的程式產生流程示意圖。圖18係依據本發明一實施例所繪示的程式產生方法流程圖。請同時參閱圖10、圖11以及圖18。在圖18所繪示的實施例中,程式產生方法包含由處理單元701-1、701-2至701-R執行步驟S1801至S1803。在步驟S1801中,接收一主程式801,其中主程式包含主方法以及為一請求類型的至少一子方法。在本發明一些實施例中,前述請求類型為公有(public),亦即為此請求類型的子方法為公有子方法。舉例來說,前述主程式可為下述main.py的程式碼內容:
def method1(a,b):
return a+b
def method2(a,b)
return a-b
def main():
output11=method1(input11, input12)
output21=method2(input21,output11[0])
return output21
在main.py中包含主方法main(),以及請求類型為公有的子方法method1(a,b)以及method2(a,b)。
在步驟S1802中,解析及讀取主程式801內為請求類型的至少一子方法,並將解析及讀取後的至少一子方法的每一個套入對應的第一通訊介面功能程式碼以生成生成子方法806-1至生成子方法806-Q,其中Q為正整數。在步驟S1803中,解析及讀取主程式801內之主方法,並將解析及讀取後的主方法以及解析及讀取後的該至少一子方法的每一個套入對應的第二通訊介面功能程式碼以生成一個生成主方法。
在本發明一些實施中,前述第一通訊介面功能程式碼以及第二通訊介面功能程式碼為利用網路作為通訊界面。在此實施例中,在前述步驟S1803後更包含下列步驟:基於解析及讀取後的主方法以及解析及讀取後的為請求類型的至少一子方法,生成網路配置檔案807。
在本發明一些實施例中,處理單元701-1、701-2至701-R從非揮發性記憶體703中讀取對應的電腦程式到內部記憶體702中然後運行,在邏輯層面上形成詞法分析器(lexical analyzer)模組802、語法分析器(parser)模組803以及程式碼產生器模組804。詞法分析器模組802對主程式801進行詞法分析(lexical analysis),將主程式801的字元序列轉換為記號(token)序列。語法分析器模組803對詞法分析器模組802的輸出進行語法分析(syntactic analysis)以獲得解析及讀取後的至少一子方法以及解析及讀取後的主方法。詞法分析以及語法分析為本發明之習知技術,在此不再贅述。
底下以前述第一通訊介面功能程式碼以及第二通訊介面功能程式碼為利用網路作為通訊界面的實施例來作說明。程式碼產生器模組804將解析及讀取後的至少一子方法的每一個套入對應的第一通訊介面功能程式碼以生成生成子方法806-1至生成子方法806-Q,以及程式碼產生器模組804將解析及讀取後的主方法以及解析及讀取後的該至少一子方法的每一個套入對應的第二通訊介面功能程式碼以生成一個生成主方法805。程式碼產生器模組804基於解析及讀取後的至少一子方法以及解析及讀取後的主方法,生成網路配置檔案807。
舉例來說,在本發明一些實施例中第一通訊介面功能程式碼如下mma_template_method1.py程式碼內容:
### template ####
import json
import psutil
import socket
from http.server import HTTPSever, BaseHTTPRequestHandler
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
## metric endpoint
def __init__(self, port=9999):
self.port = port
def do_get(self):
Return {
'hostname ': socket.gethostname(),
'ipport':'{}:{}'.format(socket.gethostbyname(
socket.gethostname()),self.port),
'category ':$methodname,
'cpu_load ':psutil.cpu_percentage(),
'instance_status ': 'ok ',
}
##request endpoint
def do_POST(self):
content_length=int(self.headers['Content-Length'])
body=self.rfile.read(content_length)
json_body=json.loads(body)
### begin of template ###
response=$methodname(json_body.params[0],
json_body.params[1],…, json_body.params[$method_paras])
output = {
'outputs':[response]
}
### end of template ###
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(outputs))
}
def serve(self):
httpd = HTTPSever(('0.0.0.0', self.port), self)
httpd.serve_forever()
SimpleHTTPRequestHandler().serve()
程式碼產生器模組804將解析及讀取後的子方法method1(a,b)套入上述第一通訊介面功能程式碼以生成子方法method1(a,b)的生成子方法如下述mma_autogen_method1.py程式碼內容:
### mma_autogen_method1.py ####
import json
import psutil
import socket
from http.server import HTTPSever, BaseHTTPRequestHandler
from main import method1
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
## metric endpoint
def __init__(self, port=9999):
self.port = port
def do_get(self):
Return {
'hostname': socket.gethostname(),
'ipport':'{}:{}'.format(socket.gethostbyname(
socket.gethostname()),self.port),
'category': 'method1',
'cpu_load': psutil.cpu_percentage(),
'instance_status': 'ok',
}
##request endpoint
def do_POST(self):
content_length=int(self.headers['Content-Length'])
body=self.rfile.read(content_length)
json_body=json.loads(body)
response=method1(json_body.params[0], json_body.params[1])
output = {
'outputs':[response]
}
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(outputs))
}
def serve(self):
httpd = HTTPSever(('0.0.0.0', self.port), self)
httpd.serve_forever()
SimpleHTTPRequestHandler().serve()
在本發明一些實施例中,第二通訊介面功能程式碼如下述mma_template_main.py程式碼內容:
### template 2 ###
import requests
def $methodname($method_params):
resp = requests.post($routerdomain/proxy, json={"category": $methodname, "params":$method_params})
return resp.outputs
程式碼產生器模組804將解析及讀取後的主方法main()套入上述第二通訊介面功能程式碼以生成主方法main()的生成主方法如下mma_autogen_main.py程式碼內容:
### mma_autogen_main.py ###
import requests
def method1(a,b):
resp = requests.post(router-domain/proxy, json={"category": "method1", "params":[a,b]})
return resp.outputs[0]
def method2(a,b):
resp = requests.post(router-domain/proxy, json={"category": "method2","params":[a,b]})
return resp.outputs[0]
def main():
output11=method1(input11, input12)
output21=method2(input21,output11[0])
return output21
在本發明一些實施例中,處理單元701-1、701-2至701-R將解析及讀取後的主方法以及解析及讀取後的為請求類型的至少一子方法套入下述k8s_confiuration_template.yaml網路配置檔案模板程式碼:
//http reverse proxy service
apiVersion: v1
kind: Service
metadata:
name: http-reverse-proxy
spec:
ports:
-port: 9999
name: proxyport
targetPort: 9999
protocol: TCP
selector:
app: http-reverse-proxy
// http reverse proxy deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-reverse-proxy
labels:
app: http-reverse-proxy
spec:
selector:
matchLabels:
app: http-reverse-proxy
template:
metadata:
labels:
app: http-reverse-proxy
containers:
-name:main
image:python:3.9
ports:
-containerPort:9999
command:[ "/bin/sh "]
args:
- -c
- >-
python http-reverse-proxy.py
// $method deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: $methodname
labels:
app:$methodname
spec:
selector:
matchLabels:
app: $methodname
template:
metadata:
labels:
app: $methodname
containers:
-name:main
image:python:3.9
ports:
-containerPort:9999
command:[ "/bin/sh "]
args:
- -c
- >-
python mma_autogen_$methodname.py
以生成網路配置檔案807,生成網路配置檔案807如下k8s_confiuration.yaml程式碼內容:
//service http-reverse-proxy
apiVersion: v1
kind: Service
metadata:
name: http-reverse-proxy
spec:
ports:
-port: 9999
name: proxyport
targetPort: 9999
protocol: TCP
selector:
app: http-reverse-proxy
//deployment http-reverse-proxy
apiVersion: apps/v1
kind: Deployment
metadata:
name: http-reverse-proxy
labels:
app: http-reverse-proxy
spec:
selector:
matchLabels:
app: http-reverse-proxy
template:
metadata:
labels:
app: http-reverse-proxy
containers:
-name:main
image:python:3.9
ports:
-containerPort:9999
command:[ "/bin/sh"]
args:
- -c
- >-
python http-reverse-proxy.py
//service method1
apiVersion: v1
kind: Service
metadata:
name: method1
spec:
ports:
-port: 9999
name: methodport
targetPort: 9999
protocol: TCP
selector:
app: method1
//service method2
apiVersion: v1
kind: Service
metadata:
name: method2
spec:
ports:
-port: 9999
name: methodport
targetPort: 9999
protocol: TCP
selector:
app: method2
//deployment method1.py
apiVersion: apps/v1
kind: Deployment
metadata:
name: method1
labels:
app: method1
spec:
selector:
matchLabels:
app: method1
template:
metadata:
labels:
app: method1
containers:
-name:main
image:python:3.9
ports:
-containerPort:9999
command:[ "/bin/sh"]
args:
- -c
- >-
python mma_autogen_method1.py
//deployment method2.py
apiVersion: apps/v1
kind: Deployment
metadata:
name: method2
labels:
app: method2
spec:
selector:
matchLabels:
app: method2
template:
metadata:
labels:
app: method2
containers:
-name:main
image:python:3.9
ports:
-containerPort:9999
command:[ "/bin/sh"]
args:
- -c
- >-
python mma_autogen_method2.py
在本發明一些實施例中,前述服務系統100與程式產生系統700合作。服務系統100接收程式產生系統700之輸出,前述方法1、方法2至方法
為由程式產生系統700執行步驟S1801至S1803所產生,控制單元101執行生成主方法。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
100:服務系統
101:控制單元
102:路由單元
103:服務單元
104:擴展控制單元
1031-1~1031-N,1032-1~1032-O,1033-1~1033-P,201,401,906,907:實例
N,O,P:整數
1041:儲存協調元件
1042:水平擴展元件
901~905:場域
908,909:連接通道
700:程式產生系統
701-1~701-R:處理單元
R,Q:正整數
702:內部記憶體
703:非揮發性記憶體
801:主程式
802:詞法分析器模組
803:語法分析器模組
804:程式碼產生器模組
805:生成主方法
806-1~806-Q:生成子方法
807:網路配置檔案
S1201~S1204, S1301~S1302, S1401~S1402, S1501~S1506, S1601~S1607, S1701~S1704, S1801~S1803:步驟
圖1係依據本發明一實施例所繪示的服務系統方塊圖。
圖2-1係依據本發明一些實施例所繪示的實例-路由單元示意圖。
圖2-2係依據本發明一些實施例所繪示的控制單元-路由單元運作示意圖。
圖3係依據本發明一實施例所繪示的擴展控制單元方塊圖。
圖4係依據本發明一些實施例所繪示的擴展控制單元運作示意圖。
圖5係依據本發明一些實施例所繪示的擴展控制單元運作示意圖。
圖6係依據本發明一些實施例所繪示的擴展控制單元運作示意圖。
圖7係依據本發明一些實施例所繪示的服務系統實施方式示意圖。
圖8係依據本發明一些實施例所繪示的服務系統實施方式示意圖。
圖9係依據本發明一些實施例所繪示的服務系統實施方式示意圖。
圖10係依據本發明一實施例所繪示的程式產生系統方塊圖。
圖11係依據本發明一實施例所繪示的程式產生流程示意圖。
圖12係依據本發明一些實施例所繪示的服務系統執行方法流程圖。
圖13係依據本發明一些實施例所繪示的選取程序流程圖。
圖14係依據本發明一些實施例所繪示的擴展程序流程圖。
圖15係依據本發明一些實施例所繪示的擴展程序流程圖。
圖16係依據本發明一些實施例所繪示的擴展程序流程圖。
圖17係依據本發明一些實施例所繪示的服務系統執行方法流程圖。
圖18係依據本發明一實施例所繪示的程式產生方法流程圖。
100:服務系統
101:控制單元
102:路由單元
103:服務單元
104:擴展控制單元
1031-1~1031-N,1032-1~1032-O,1033-1~1033-P:實例
N,O,P:整數
Claims (10)
- 一種程式產生系統,包含至少一處理單元,該至少一處理單元經配置以接收一主程式,其中該主程式包含一主方法以及為一請求類型的至少一子方法,並且執行下述步驟: (a)解析及讀取該主程式內為該請求類型的該至少一子方法,並將解析及讀取後的該至少一子方法的每一個套入對應的一第一通訊介面功能程式碼以生成至少一生成子方法;以及 (b)解析及讀取該主程式內之該主方法,並將解析及讀取後的該主方法以及解析及讀取後的該至少一子方法的每一個套入對應的一第二通訊介面功能程式碼以生成一生成主方法。
- 如請求項1所述之程式產生系統,其中該至少一處理單元經配置以執行:(c)基於解析及讀取後的該主方法以及解析及讀取後的為該請求類型的該至少一子方法,生成一網路配置檔案。
- 一種與請求項1所述之程式產生系統合作之服務系統,包含: 一控制單元,經配置以接收一外部請求,並基於該外部請求依序呼叫多個方法; 一服務單元,經配置以基於一第一指示,產生及運行一實例,以及基於一第二指示關閉該實例,該實例對應該些方法中的一個; 一路由單元,經配置以接收該些方法中被呼叫的一當前方法的一呼叫參數,並執行:響應於對應該當前方法的一實例數為零,記錄該當前方法的一請求以及該當前方法的該呼叫參數;響應於對應該當前方法的該實例數為非零,基於一選取程序,在對應該當前方法的至少一運行中實例中選取一服務實例;以及 一擴展控制單元,經配置以管控該服務單元所產生所有該實例的生存狀態,以及每隔一預定時間執行一擴展程序調整該服務單元對應每一該方法的該實例數;其中該控制單元執行該生成主方法,該些方法為該至少一生成子方法。
- 一種服務系統,包含: 一控制單元,經配置以接收一外部請求,並基於該外部請求依序呼叫多個方法; 一服務單元,經配置以基於一第一指示,產生及運行一實例,以及基於一第二指示關閉該實例,該實例對應該些方法中的一個; 一路由單元,經配置以接收該些方法中被呼叫的一當前方法的一呼叫參數,並執行:響應於對應該當前方法的一實例數為零,記錄該當前方法的一請求以及該當前方法的該呼叫參數;響應於對應該當前方法的該實例數為非零,基於一選取程序,在對應該當前方法的至少一運行中實例中選取一服務實例;以及 一擴展控制單元,經配置以管控該服務單元所產生所有該實例的生存狀態,以及每隔一預定時間執行一擴展程序調整該服務單元對應每一該方法的該實例數。
- 如請求項4所述之服務系統,其中該選取程序包含:在一位置-通訊埠列表上,在對應該當前方法的該至少一運行中實例中,選取排在一第一位置的一第一位置運行中實例作為該服務實例。
- 如請求項4所述之服務系統,其中該擴展程序包含: 針對該些方法中的一當前處理方法,執行下述步驟: (a)響應於對應於該當前處理方法的一實例數為1、該路由單元中所記載對應於該當前處理方法的一請求數量為零以及對應於該當前處理方法的所有當前處理方法實例的一平均運行指標小於一第二指標預設值且持續時間大於一第二預定時間,關閉對應於該當前處理方法的一第一待關閉實例以使對應於該當前處理方法的該實例數為零;以及 (b)響應於對應於該當前處理方法的該實例數大於1以及對應於該當前處理方法的所有當前處理方法實例的該平均運行指標小於該第二指標預設值且持續時間大於該第二預定時間,選取並關閉對應於該當前處理方法的一第二待關閉實例。
- 一種程式產生方法,由至少一處理單元執行,該程式產生方法包含下述步驟: (a)接收一主程式,其中該主程式包含一主方法以及為一請求類型的至少一子方法; (b)解析及讀取該主程式內為該請求類型的該至少一子方法,並將解析及讀取後的該至少一子方法的每一個套入對應的一第一通訊介面功能程式碼以生成至少一生成子方法;以及 (c)解析及讀取該主程式內之該主方法,並將解析及讀取後的該主方法以及解析及讀取後的該至少一子方法的每一個套入對應的一第二通訊介面功能程式碼以生成一生成主方法。
- 如請求項7所述之程式產生方法,該程式產生方法包含: (d)基於解析及讀取後的該主方法以及解析及讀取後的為該請求類型的該至少一子方法,生成一網路配置檔案。
- 一種與請求項7所述之程式產生方法合作之服務系統執行方法,適用於一服務系統,該服務系統包含一控制單元、一服務單元、一路由單元以及一擴展控制單元,該服務系統執行方法包含下述步驟: (a)由該控制單元接收一外部請求,並基於該外部請求依序呼叫多個方法; (b)由該服務單元基於一第一指示,產生及運行一實例,以及基於一第二指示關閉該實例,該實例對應該些方法中的一個; (c)由該路由單元接收該些方法中被呼叫的一當前方法的一呼叫參數,並執行:響應於對應該當前方法的一實例數為零,記錄該當前方法的一請求以及該當前方法的該呼叫參數;響應於對應該當前方法的該實例數為非零,基於一選取程序,在對應該當前方法的至少一運行中實例中選取一服務實例;以及 (d)由該擴展控制單元管控該服務單元所產生所有該實例的生存狀態,以及每隔一預定時間執行一擴展程序調整該服務單元對應每一該方法的該實例數;其中該控制單元執行該生成主方法,該些方法為該至少一生成子方法。
- 一種服務系統執行方法,適用於一服務系統,該服務系統包含一控制單元、一服務單元、一路由單元以及一擴展控制單元,該服務系統執行方法包含下述步驟: (a)由該控制單元接收一外部請求,並基於該外部請求依序呼叫多個方法; (b)由該服務單元基於一第一指示,產生及運行一實例,以及基於一第二指示關閉該實例,該實例對應該些方法中的一個; (c)由該路由單元接收該些方法中被呼叫的一當前方法的一呼叫參數,並執行:響應於對應該當前方法的一實例數為零,記錄該當前方法的一請求以及該當前方法的該呼叫參數;響應於對應該當前方法的該實例數為非零,基於一選取程序,在對應該當前方法的至少一運行中實例中選取一服務實例;以及 (d)由該擴展控制單元管控該服務單元所產生所有該實例的生存狀態,以及每隔一預定時間執行一擴展程序調整該服務單元對應每一該方法的該實例數。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW112126083A TWI862001B (zh) | 2023-07-12 | 2023-07-12 | 程式產生系統、程式產生方法、服務系統以及服務系統執行方法 |
| US18/770,457 US20250023783A1 (en) | 2023-07-12 | 2024-07-11 | Program generation system, program generation method, service system, and service system execution method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| TW112126083A TWI862001B (zh) | 2023-07-12 | 2023-07-12 | 程式產生系統、程式產生方法、服務系統以及服務系統執行方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TWI862001B true TWI862001B (zh) | 2024-11-11 |
| TW202503511A TW202503511A (zh) | 2025-01-16 |
Family
ID=94210793
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW112126083A TWI862001B (zh) | 2023-07-12 | 2023-07-12 | 程式產生系統、程式產生方法、服務系統以及服務系統執行方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20250023783A1 (zh) |
| TW (1) | TWI862001B (zh) |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20190220289A1 (en) * | 2018-01-18 | 2019-07-18 | Sap Se | Configuration for Application Using Microservices |
| CN112955869A (zh) * | 2018-11-08 | 2021-06-11 | 英特尔公司 | 功能即服务(faas)系统增强 |
| CN112965700A (zh) * | 2021-05-17 | 2021-06-15 | 太平金融科技服务(上海)有限公司 | 基于路由的微服务处理方法、装置、计算机设备和介质 |
| US20210294679A1 (en) * | 2020-03-19 | 2021-09-23 | Intuit Inc. | Method and system for generating an application programming interface based on declarative schemas for individual services |
| TWI764971B (zh) * | 2016-12-30 | 2022-05-21 | 美商英特爾公司 | 物聯網 |
| US20230161647A1 (en) * | 2020-07-24 | 2023-05-25 | Red Hat, Inc. | Extending the kubernetes api in-process |
-
2023
- 2023-07-12 TW TW112126083A patent/TWI862001B/zh active
-
2024
- 2024-07-11 US US18/770,457 patent/US20250023783A1/en active Pending
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| TWI764971B (zh) * | 2016-12-30 | 2022-05-21 | 美商英特爾公司 | 物聯網 |
| US20190220289A1 (en) * | 2018-01-18 | 2019-07-18 | Sap Se | Configuration for Application Using Microservices |
| CN112955869A (zh) * | 2018-11-08 | 2021-06-11 | 英特尔公司 | 功能即服务(faas)系统增强 |
| US20210294679A1 (en) * | 2020-03-19 | 2021-09-23 | Intuit Inc. | Method and system for generating an application programming interface based on declarative schemas for individual services |
| US20230161647A1 (en) * | 2020-07-24 | 2023-05-25 | Red Hat, Inc. | Extending the kubernetes api in-process |
| CN112965700A (zh) * | 2021-05-17 | 2021-06-15 | 太平金融科技服务(上海)有限公司 | 基于路由的微服务处理方法、装置、计算机设备和介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| US20250023783A1 (en) | 2025-01-16 |
| TW202503511A (zh) | 2025-01-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Khriji et al. | Design and implementation of a cloud-based event-driven architecture for real-time data processing in wireless sensor networks | |
| Kumar et al. | DFuse: A framework for distributed data fusion | |
| Chu et al. | The design and implementation of a declarative sensor network system | |
| Kumar et al. | Resource-aware distributed stream management using dynamic overlays | |
| CN109656538A (zh) | 应用程序的生成方法、装置、系统、设备和介质 | |
| CN103442049A (zh) | 一种面向构件的混合型云操作系统体系结构及其通信方法 | |
| Brinkschulte | An artificial DNA for self‐descripting and self‐building embedded real‐time systems | |
| CN108196787A (zh) | 集群存储系统的配额管理方法以及集群存储系统 | |
| CN103166964B (zh) | 用于超级计算系统监控的前后端实时通信方法 | |
| Huang et al. | HCloud: A trusted JointCloud serverless platform for IoT systems with blockchain | |
| TWI862001B (zh) | 程式產生系統、程式產生方法、服務系統以及服務系統執行方法 | |
| WO2023147094A1 (en) | Code compilation for dynamic peer-to-peer networked code execution | |
| CN110457392A (zh) | 副本读写方法及装置 | |
| Kattepur et al. | Analysis of timing constraints in heterogeneous middleware interactions | |
| Brinkschulte et al. | Organic real-time middleware | |
| Lu et al. | Autonomous integration and optimal allocation of heterogeneous information services for high-assurance in distributed information service system | |
| Papaemmanouil | Supporting extensible performance SLAs for cloud databases | |
| CN120892294B (zh) | 基于snmp的数据库指标监控方法、装置、设备及介质 | |
| US20190272259A1 (en) | File system with distributed entity state | |
| Basanta‐Val et al. | Non‐functional information transmission patterns for distributed real‐time Java | |
| Liu | Scalable online simulation for modeling Grid dynamics | |
| CN117119058B (zh) | Ceph分布式存储集群中存储节点优化方法及相关设备 | |
| Zhu et al. | Hybrid Resource Modeling and Scheduling Platform Based on Multisource Cooperation for Cyber‐Physical‐Human System | |
| Sang et al. | Mobile-process-based parallel simulation | |
| Bannour et al. | Exploring IoT trickle-based dissemination using timed model-checking and symbolic execution |