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