serverless 框架_Malaguv1.4.1支持Serverless的微服务框架
Malagu 框架簡介
Malagu 基于 TypeScript 的 Serverless First、組件化、平臺無關(guān)的漸進(jìn)式應(yīng)用框架。
背景
當(dāng)我們著手開發(fā)一個新項(xiàng)目的時(shí)候,單體和微服務(wù)架構(gòu)該如何抉擇?對于創(chuàng)業(yè)團(tuán)隊(duì)來說,更傾向于先采用單體架構(gòu)來試錯,商業(yè)模式驗(yàn)證成功后,再根據(jù)業(yè)務(wù)規(guī)模的增漲逐漸演進(jìn)到微服務(wù)架構(gòu),從而解決單體架構(gòu)帶來的臃腫、可維護(hù)性等等問題。
目前,微服務(wù)的落地方案有很多,也相當(dāng)成熟,比如像 Spring Cloud、Dubbo 等等的微服務(wù)框架。而 Malagu 提供的微服務(wù)解決方案是 Serverless 優(yōu)先的,更加貼合 Serverless 場景。Serverless 讓微服務(wù)框架的實(shí)現(xiàn)變得更加輕量,框架的使用更為簡單,而當(dāng)我們在使用傳統(tǒng)微服務(wù)框架部署在 Serverless 平臺上的時(shí)候,我們會發(fā)現(xiàn)傳統(tǒng)微服務(wù)框架過于臃腫,很多在傳統(tǒng)服務(wù)器架構(gòu)上很有用的功能,被 Serverless 底層給實(shí)現(xiàn)并透明掉了,讓開發(fā)者無需關(guān)心。比如服務(wù)注冊與發(fā)現(xiàn)、健康監(jiān)控、日志、運(yùn)維等等。
特征
Malagu 框架提供的微服務(wù)解決方案有如下特征:
- 輕量級:沒有依賴第三方微服務(wù)模塊
- 簡單:與普通后端服務(wù)開發(fā)風(fēng)格保持一致,開箱即用,零學(xué)習(xí)成本
- 平滑切換:單體無縫切換為微服務(wù)
- 統(tǒng)一:前端與 BFF、BFF 與 微服務(wù),微服務(wù)與微服務(wù)采用統(tǒng)一的 JSON RPC 通信協(xié)議
- Serverless 優(yōu)先
初始化微服務(wù)項(xiàng)目
Malagu 框架提供了一個微服務(wù)開發(fā)模板 microservice ,基于該模板,我們可以快速初始化一個微服務(wù)項(xiàng)目,當(dāng)然,我們也可以創(chuàng)建 monorep 風(fēng)格的項(xiàng)目,管理多個微服務(wù)項(xiàng)目,可以選擇模板 multi-component。初始化微服務(wù)項(xiàng)目命令如下:
# 初始化一個項(xiàng)目名稱為 user-service 的微服務(wù)項(xiàng)目malagu init user-service microservice微服務(wù)項(xiàng)目目錄結(jié)構(gòu)如下:
.├── README.md├── malagu.yml # 配置文件├── package.json├── src│ ├── common│ │ └── welcome-protocol.ts # 接口定義│ └── node│ ├── module.ts # 模塊定義│ └── welcome-server.ts # 接口實(shí)現(xiàn)└── tsconfig.json開發(fā)微服務(wù)
調(diào)用微服務(wù)
方式一:使用配置文件定義微服務(wù)端點(diǎn)
import { WelcomeServer } from 'user-service/common/welcome-protocol';import { Autorpc } from '@malagu/rpc';import { Component } from '@malagu/core';@Component()export class A { @Autorpc(WelcomeServer) protected welcomeServer: WelcomeServer; say(): Promise { return this.welcomeServer.say(); }}定義微服務(wù)端點(diǎn):
malagu: rpc: endpoint: # endpoint 的 key 需要與 @Autorpc 參數(shù)的字符串值保持一致 WelcomeServer: http://abc.com/api/WelcomeServer方式二:在 @Autorpc() 參數(shù)中直接定義微服務(wù)端點(diǎn)
import { WelcomeServer } from 'user-service/common/welcome-protocol';import { Autorpc } from '@malagu/rpc';import { Component } from '@malagu/core';@Component()export class A { @Autorpc('http://abc.com/api/WelcomeServer') protected welcomeServer: WelcomeServer; say(): Promise { return this.welcomeServer.say(); }}微服務(wù)端點(diǎn)規(guī)則
使用 Malagu 開發(fā)的微服務(wù)的端點(diǎn)規(guī)則為:[域名]/[路由前綴]/[RPC 前綴]/[服務(wù)標(biāo)識]。其中:
- 默認(rèn)路由前綴(malagu.server.path)為 /
- 默認(rèn) RPC 前綴(malagu.rpc.path)為 api
- 服務(wù)標(biāo)識一般定義為接口名稱,比如 WelcomeServer
微服務(wù)端點(diǎn)占位符
如果使用 Malagu 框架開發(fā)的微服務(wù),端點(diǎn)的格式是統(tǒng)一的,為了簡化微服務(wù)端點(diǎn)的配置,框架提供了兩個占位符:
- {rpcPath} 表示的值為:[路由前綴]/[RPC 前綴]
- {erviceIdentifier} 表示的值為 [服務(wù)標(biāo)識]
在微服務(wù)調(diào)用的方式一中,配置文件還可以如下配置:
malagu: rpc: endpoint: # endpoint 的 key 需要與 @Autorpc 參數(shù)的字符串值保持一致 WelcomeServer: http://abc.com{rpcPath}/{serviceIdentifier}使用默認(rèn)端點(diǎn)進(jìn)一步簡化配置:
malagu: rpc: defaultEndpoint: http://abc.com{rpcPath}/{serviceIdentifier} # 只要你的微服務(wù)部署在同一個域名下微服務(wù)認(rèn)證
Malagu 框架提供了一個接口 ClientConfigProcessor ,該接口定義如下:
import { AxiosRequestConfig } from 'axios';export const ClientConfigProcessor = Symbol('ClientConfigProcessor');export interface ClientConfigProcessor { process(config: AxiosRequestConfig): Promise;}框架把 HTTP 請求的配置參數(shù)傳遞給該接口的實(shí)現(xiàn),通過該接口的實(shí)現(xiàn),我們可以自定義 HTTP 請求配置參數(shù),從而把我們的認(rèn)證信息帶上。
如果我們采用的是簡單認(rèn)證,框架提供了一個配置屬性 malagu.rpc.client.config 。配置示例如下:
malagu: rpc: client: config: auth: username: abc password: 123除了上面的配置屬性, AxiosRequestConfig 的其他屬性都可以通過 malagu.rpc.client.config 配置。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的serverless 框架_Malaguv1.4.1支持Serverless的微服务框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eja智能压力变送器工作原理_横河EJA
- 下一篇: 内存中的调用别的软件程序加密解密函数_公