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
开发微服务
- 定义接口:
export const WelcomeServer = 'WelcomeServer';export interface WelcomeServer { say(): Promise;}
- 实现接口
import { WelcomeServer } from '../common/welcome-protocol';import { Rpc } from '@malagu/rpc';@Rpc(WelcomeServer)export class WelcomeServerImpl implements WelcomeServer { say(): Promise { 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 { 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 配置。
serverless 框架_Malaguv1.4.1支持Serverless的微服务框架相关推荐
- java微服务框架有哪些_java中有哪些常见微服务框架
常见微服务框架介绍: Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转.面向切面编程等等. 示例代码:import org.springframework.boot.*; ...
- centos部署python flask_python 微服务框架之nameko实践
大纲: 1.本篇关键技术点及其释义 2.实际需求和目标 3.可行的三大解决方案 4.微服务与传统服务的差别 5.代码大纲:安装依赖及nameko五个完整的代码示例 6.附录:docker的在线安装方式 ...
- go 微服务框架_清晰架构(Clean Architecture)的Go微服务
更新 我最进对这个框架进行了重大升级,虽然所做的改动不大,但成效显著.这次更新修复了旧框架中的所有主要问题,尽管它的的主要项目结构和接口都没有改变,具体改动内容请参见清晰架构(Clean Archit ...
- 技术研究院006---B站自用的微服务框架——Kratos
大家都知道微服务有两个痛点,一个是如何拆分微服务,微服务的边界怎么划分制定:二是微服务上了规模之后如何管理,因为只要上了规模,任何小小的问题都可能会被放大,最后导致雪崩效应. Bilibili作为一个 ...
- Go:微服务框架介绍
golang 常见微服务框架有 按starts数排列 1 go-kit go-kit是一个分布式的开发工具集,在大型的组织(业务)中可以用来构建微服务,其解决了分布式系统中大多数常见问题,因此,使用者 ...
- Kratos战神微服务框架(一)
目录 Kratos战神微服务框架 简介 目标 原则 特性 架构 CLI工具 安装 创建项目 项目结构 代码生成与运行 生成 运行 测试接口 Kratos战神微服务框架 简介 Kratos 一套轻量级 ...
- Kratos战神微服务框架(二)
Kratos战神微服务框架(二) 目录 Kratos战神微服务框架(二) 项目结构 api编写 protobuf编写 使用makefile service层接口实现 biz层 data层 config ...
- 微服务(三):python微服务框架有哪些?
python中的微服务框架有Istio.Dubbo和nameko三种 1.Istio Istio是一个用来连接.管理和保护微服务的开放平台,使用Istio可以建立已部署服务网络,且Istio具备负载均 ...
- python-37-python微服务框架Nameko
Python微服务框架nameko的简单使用 推荐一款 Python 微服务框架 - Nameko 微服务框架有Istio.Dubbo和nameko三种: 一.Istio Istio是一个用来连接.管 ...
最新文章
- Spring Boot 集成 Swagger-Bootstrap-UI,非常棒的解决方案
- 【Spark篇】---Spark解决数据倾斜问题
- js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画
- 【转】研发游戏引擎那么难,为什么还应该砸钱去干?
- 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
- AIX系统卸载oracle
- 并行计算——基础并行计算
- 在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
- 数字滤波算法——中值滤波
- autocad 二次开发 拆分图纸_(整理)autocad二次开发块表记录获得和cad层级结构,以及图块保存与打开....
- 深度学习-各类数据集汇总
- QQ坦白说查看好友方法攻略
- WordPress主题制作全过程(八):制作index.php
- Microsoft edge升级之后收藏夹内容丢失_等了这么久,Edge 终于成为我的默认浏览器...
- 【解决方法】域名指向本地(127.0.0.1, 0.0.0.0)
- 计算机系统限制某个用户只允许,Win10系统如何设置某些用户只能运行指定应用程序...
- JS 全屏和退出全屏--requestFullScreen详解及兼容代码
- Android中使用自定义的view实现圆形图片的效果
- C语言 sigaction函数捕捉信号 注册回调函数
- K-Means对红酒数据进行聚类||python
热门文章
- Linux服务器上线时间,查看linux服务器时间
- 指定路径_Workbench中如何创建指定路径分析的变形曲线
- 上网课的心得体会1000字_上网课心得体会300字 上网课的心得体会
- C - Line-line Intersection Gym - 102220C(线段相交)
- 如何把微信文章中的语音/音乐下载下来
- 场景/故事/story——寻物者发布消息场景、寻失主发布消息场景、消息展示场景、登录网站场景...
- Google分布式系统三驾马车: GFS,mapreduce,Bigtable
- 关于报表中汇率转换的问题
- (求助)即时发送异常给开发人员
- Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )