Malagu v1.4.1 发布 - 支持 Serverless 优先的微服务框架

行走的ET 2020-11-09 11:36:53 ⋅ 701 阅读

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<string>;
}
  1. 实现接口
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 配置。


全部评论: 0

    我有话说:

    【开源资讯】JWCloud 专业版 v1.0.0 发布,基于 SpringCloud 研发服务框架

    简介 JavaWeb_Cloud 服务平台是一款基于 SpringCloud 框架研发分布式微服务框架,主要使用技术栈包括: SpringCloud、Vue、ElementUI

    Helidon 2.1.0 发布,Oracle 服务框架

    Helidon 2.1.0 现已发布,这是一个次要发行版,包含了一些错误修复和增强功能。Helidon 是 Oracle 开源一个用于编写服务 Java 框架,这些微服务运行在由 Netty

    Serverless Framework 2.3.0 发布

    Serverless 架构开发框架 Serverless Framework 发布了 2.3.0 版本,该框架使用 AWS Lambda、Azure Functions、Google

    老板逼你上服务了吗?

    “ 这些年软件设计规模越来越庞大,业务需求也越来越复杂,针对系统性能、高吞吐率、高稳定性、高扩展等特性提出了更高要求。   图片来自 Pexels可以说业务需求是软件架构能力

    Micronaut 2.4.0 发布,基于 JVM 服务应用框架

    Micronaut 是 Grails 框架作者打造开源项目,也是新一代基于 JVM 全栈服务框架,用于构建模块化、易于测试服务应用。有关 Micronaut 特性介绍点此查看。 近日

    Micronaut 2.4.2 发布,基于 JVM 服务应用框架

    Micronaut 是 Grails 框架作者打造开源项目,也是新一代基于 JVM 全栈服务框架,用于构建模块化、易于测试服务应用。有关 Micronaut 特性介绍点此查看。 近日

    Fizz Gateway 1.1.1 发布,基于 Java异步框架WebFlux开发服务网

    Fizz Gateway 是一个基于 Java异步框架WebFlux开发服务网关,能够实现热服务编排、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理等目的,拥有强大自定义

    Netty 4.1.61.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.61.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户端快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    Netty 4.1.65.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.65.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户端快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    Netty 4.1.59.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.59.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户端快速开发。 该版本除了修复各种错误之外,还包含一个安全修复程序

    Netty 4.1.60.Final 发布,异步事件驱动网络应用框架

    Netty 4.1.60.Final 已经发布。Netty 是一个异步事件驱动网络应用框架,主要用于可维护高性能协议服务器和客户端快速开发。本次更新除了修复各种错误之外,还包含了一个安全修复

    Python ORM框架SQLAlchemy 1.3.20 发布

    SQLAlchemy 1.3.20 发布了。SQLAlchemy 是一个 Python SQL 工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久化模式,专门用于高效和高性能数据库

    Nacos 1.4.1 发布,修复指定特殊 UA 可绕过所有鉴权安全漏洞

    Nacos 1.4.1发布,此版本主要新功能是支持 IPv6 服务注册,以及为 Csharp 客户端提供 UDP push 支持。 更值得关注是,1.4.1 版本解决了此前被曝出绕过鉴权

    精品推荐:Nacos 发布 v0.6.0 版本,支持 Dubbo 和 Docker 部署

    阿里巴巴服务开源项目Nacos发布 v0.6.0 版本,该版本开始支持 Dubbo服务发现和配置管理,并针对 Docker 部署提供了官方 Docker 镜像,以及优化了Nacos 控制台

    Angular 11.1.0 正式发布支持 TypeScript 4.1

    Angular 是一个基于 TypeScript 开源前端框架,由 Google Angular 团队以及社区共同领导。Angular 是由 AngularJS 同一个开发团队完全重写而成

    「转载」服务分布式架构中,如何实现日志链路跟踪?

    背景 开发排查系统问题用得最多手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面图     上图

    码云推荐:一个优秀分布式spring boot/Spring Cloud API限流框架,特别适合服务架构

    一个优秀分布式spring boot/Spring Cloud API限流框架,特别适合服务架构.

    微型Java开发框架Solon 1.1发布,QPS达10万+

    简介 Solon 是一个微型Java开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,2700多次commit;内核保持0.1m身材,超高Web跑分,良好使用体验

    PyCharm 2021.1 EAP 4 发布支持 WSL 2 和更快索引

    PyCharm 2021.1 EAP 4 为 WSL 2 支持带来了几个不错补充,并使索引速度更快,同时引入了 GitHub 拉取请求模板。 支持 WSL 2 从现在开始,你可以在