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

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

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可以说业务需求是软件架构能力

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

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

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

    Netty 4.1.59.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 版本解决了此前被曝出绕过鉴权

    Angular 11.1.0 正式发布支持 TypeScript 4.1

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

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

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

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

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

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

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

    Druid 1.2.4 版本发布,增强 SQL Parser,支持 JDK8 日期类型

    Druid 1.2.4 版本现已发布,这个是一个小 bug 修复版本,修复了一系列 SQL Parser 问题,增强对 JDK 8 支持。 Issues SQL Parser 增强对

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

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

    开源 Servlet 服务器 smart-servlet v0.1.1 发布

    smart-servlet 是一款实现了 Servlet 3.1 规范,支持多应用隔离部署 Web 服务器。 smart-servlet 在 smart-http 基础之上,通过继承

    Istio 1.8.3 发布,大型服务系统管理工具

    Istio 1.8.3 已发布,Istio 是一个由谷歌、IBM 与 Lyft 共同开发开源项目,旨在提供一种统一化服务连接、安全保障、管理与监控方式。具体来说,Istio 是一个开源服务网格

    Fes.js v0.4.1 版本发布,一套优秀中后台系统前端解决方案

    Fes.js 是一套优秀中后台前端解决方案。提供初始项目、开发调试、Mock接口、编译打包命令行工具。内置布局、权限、数据字典、状态管理、存储、Api等多个模块。以约定、配置化、组件化设计思想

    CKEditor 5 v23.1.0 发布支持嵌入 Raw HTML

    CKEditor 5 v23.1.0 稳定版已发布,主要更新内容包括:支持在编辑器嵌入原生 HTML 代码并进行渲染、改进 reconversion API 以及支持将表格内容粘贴到另一个表格

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

    Micronaut 2.2.3 发布了,本次更新内容主要为项目组件升级。 Micronaut 是 Grails 框架作者打造开源项目,也是新一代基于 JVM 全栈服务框架,用于构建模块化