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

开发微服务

  1. 定义接口:
export const WelcomeServer = 'WelcomeServer';export interface WelcomeServer {    say(): Promise;}
  1. 实现接口
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的微服务框架相关推荐

  1. java微服务框架有哪些_java中有哪些常见微服务框架

    常见微服务框架介绍: Spring Boot:这可能是最好的Java微服务框架了,它适用于控制反转.面向切面编程等等. 示例代码:import org.springframework.boot.*; ...

  2. centos部署python flask_python 微服务框架之nameko实践

    大纲: 1.本篇关键技术点及其释义 2.实际需求和目标 3.可行的三大解决方案 4.微服务与传统服务的差别 5.代码大纲:安装依赖及nameko五个完整的代码示例 6.附录:docker的在线安装方式 ...

  3. go 微服务框架_清晰架构(Clean Architecture)的Go微服务

    更新 我最进对这个框架进行了重大升级,虽然所做的改动不大,但成效显著.这次更新修复了旧框架中的所有主要问题,尽管它的的主要项目结构和接口都没有改变,具体改动内容请参见清晰架构(Clean Archit ...

  4. 技术研究院006---B站自用的微服务框架——Kratos

    大家都知道微服务有两个痛点,一个是如何拆分微服务,微服务的边界怎么划分制定:二是微服务上了规模之后如何管理,因为只要上了规模,任何小小的问题都可能会被放大,最后导致雪崩效应. Bilibili作为一个 ...

  5. Go:微服务框架介绍

    golang 常见微服务框架有 按starts数排列 1 go-kit go-kit是一个分布式的开发工具集,在大型的组织(业务)中可以用来构建微服务,其解决了分布式系统中大多数常见问题,因此,使用者 ...

  6. Kratos战神微服务框架(一)

    目录 Kratos战神微服务框架 简介 目标 原则 特性 架构 CLI工具 安装 创建项目 项目结构 代码生成与运行 生成 运行 测试接口 Kratos战神微服务框架 简介 Kratos 一套轻量级 ...

  7. Kratos战神微服务框架(二)

    Kratos战神微服务框架(二) 目录 Kratos战神微服务框架(二) 项目结构 api编写 protobuf编写 使用makefile service层接口实现 biz层 data层 config ...

  8. 微服务(三):python微服务框架有哪些?

    python中的微服务框架有Istio.Dubbo和nameko三种 1.Istio Istio是一个用来连接.管理和保护微服务的开放平台,使用Istio可以建立已部署服务网络,且Istio具备负载均 ...

  9. python-37-python微服务框架Nameko

    Python微服务框架nameko的简单使用 推荐一款 Python 微服务框架 - Nameko 微服务框架有Istio.Dubbo和nameko三种: 一.Istio Istio是一个用来连接.管 ...

最新文章

  1. Spring Boot 集成 Swagger-Bootstrap-UI,非常棒的解决方案
  2. 【Spark篇】---Spark解决数据倾斜问题
  3. js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画
  4. 【转】研发游戏引擎那么难,为什么还应该砸钱去干?
  5. 【最新】docker 安装elasticsearch + kibana步骤【第二篇_kibana】
  6. AIX系统卸载oracle
  7. 并行计算——基础并行计算
  8. 在Windows Server 2008 R2(64位)上安装SharePoint 2007出现的一个错误的解决方法
  9. 数字滤波算法——中值滤波
  10. autocad 二次开发 拆分图纸_(整理)autocad二次开发块表记录获得和cad层级结构,以及图块保存与打开....
  11. 深度学习-各类数据集汇总
  12. QQ坦白说查看好友方法攻略
  13. WordPress主题制作全过程(八):制作index.php
  14. Microsoft edge升级之后收藏夹内容丢失_等了这么久,Edge 终于成为我的默认浏览器...
  15. 【解决方法】域名指向本地(127.0.0.1, 0.0.0.0)
  16. 计算机系统限制某个用户只允许,Win10系统如何设置某些用户只能运行指定应用程序...
  17. JS 全屏和退出全屏--requestFullScreen详解及兼容代码
  18. Android中使用自定义的view实现圆形图片的效果
  19. C语言 sigaction函数捕捉信号 注册回调函数
  20. K-Means对红酒数据进行聚类||python

热门文章

  1. Linux服务器上线时间,查看linux服务器时间
  2. 指定路径_Workbench中如何创建指定路径分析的变形曲线
  3. 上网课的心得体会1000字_上网课心得体会300字 上网课的心得体会
  4. C - Line-line Intersection Gym - 102220C(线段相交)
  5. 如何把微信文章中的语音/音乐下载下来
  6. 场景/故事/story——寻物者发布消息场景、寻失主发布消息场景、消息展示场景、登录网站场景...
  7. Google分布式系统三驾马车: GFS,mapreduce,Bigtable
  8. 关于报表中汇率转换的问题
  9. (求助)即时发送异常给开发人员
  10. Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )