内容简介:Malagu 框架简介 Malagu 基于 TypeScript 的 Serverless First、组件化、平台无关的渐进式应用框架。 背景 当我们着手开发一个新项目的时候,单体和微服务架构该如何抉择?对于创业团队来说,更倾向于先采用单体架...
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
开发微服务
- 定义接口:
export const WelcomeServer = 'WelcomeServer'; export interface WelcomeServer { say(): Promise<string>; }
- 实现接口
import { WelcomeServer } from '../common/welcome-protocol'; import { Rpc } from '@malagu/rpc'; @Rpc(WelcomeServer) export class WelcomeServerImpl implements WelcomeServer { say(): Promise<string> { return Promise.resolve('Welcome to Malagu'); } }
调用微服务
方式一:使用配置文件定义微服务端点
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<String> { 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<String> { 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<void>; }
框架把 HTTP 请求的配置参数传递给该接口的实现,通过该接口的实现,我们可以自定义 HTTP 请求配置参数,从而把我们的认证信息带上。
如果我们采用的是简单认证,框架提供了一个配置属性 malagu.rpc.client.config
。配置示例如下:
malagu: rpc: client: config: auth: username: abc password: 123
除了上面的配置属性, AxiosRequestConfig
的其他属性都可以通过 malagu.rpc.client.config
配置。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- QuickTask动态脚本支持框架整体介绍篇
- SwooleDistributed 框架 2.5 发布,全面支持 Docker
- PHP Codeigniter 框架支持 SQL Server
- YuebonCore 快速开发框架支持 .Net 5.0
- 【剖析 | SOFARPC 框架】系列之 SOFARPC 注解支持剖析
- Golang/Gin框架添加对HTTPS的支持
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。