内容简介: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的支持
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Seasoned Schemer
Daniel P. Friedman、Matthias Felleisen / The MIT Press / 1995-12-21 / USD 38.00
drawings by Duane Bibbyforeword and afterword by Guy L. Steele Jr.The notion that "thinking about computing is one of the most exciting things the human mind can do" sets both The Little Schemer (form......一起来看看 《The Seasoned Schemer》 这本书的介绍吧!