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