PIG Microservice Architecture
系统白皮书
──

+ 版本 | v4.2 +
佩格科技
COPYRIGHT © pig4cloud. ALL RIGHTS RESERVED.

关于 PIG 商业版

基于广泛的企业业务场景,沉淀与提供面向业务场景的可复用技术应用能力,以产品的思维来打造的为企业提供能力复用的企业数字化中台。我们具备如下优势:

商业版提供:

1626166600

架构说明

架构图

平台设计灵活可扩展、可移植、可应对高并发需求。同时兼顾本地化、私有云、公有云部署,支持 SaaS 模式应用。

基础架构

1626164027

主要技术栈

1626164272

后端技术栈

前端技术栈

模块说明

技术特色

基于 Java 主流开源技术构建

平台基于流行的 J2EE 技术栈,应用稳定的 Spring Cloud 微服务框架进行构建,主流开源的架构给我们带来了以下优势:

基于微服务架构设计和扩展

PIGX 采用微服务架构设计,平台基础模块的每一个应用功能都使用微服务完成:

基于 PIGX 开发的应用系统,可以很容易的将业务对象作为基本单元进行纵向拆分,以交互层次作为标准进行横向拆分,从而形成多应用交互的微应用架构体系,有效的实现应用的拆分,实现敏捷开发和部署。

服务无状态

单个微服务节点的性能在大业务量时性能会遇到瓶颈,无法满足企业对业务系统的要求,PIGX 服务采用无状态化设计,可以实现水平扩展部署。

前后端分离

PIGX 提供完整的 REST API 接口,采用前后端分离技术,可以同时高效的支持移动 APP、Web、小程序等应用的开发场景,同时结合 Spring Security OAuth2 扩展,采用统一的认证中心,保障 REST API 的安全性。

高可用

服务层高可用

存储层高可用

可扩展

企业业务需求通常比较复杂,因此实现这些需求的业务系统在代码层面上也是非常复杂的,如果没有合理的结构来组织这些重要代码,对企业后期开发或调整新业务逻辑、维护业务系统等都会造成麻烦,甚至有可能导致重构功能而浪费人力物力。

如上图所示,PIGX 通过使用 Maven 来管理模块依赖,并根据系统架构设计,以业务需求来将代码分模块管理,从而实现业务系统整体的模块化开发。另外模块化的拆分按照“高内聚、低耦合”的原则,服务组件之间有清晰的边界,易于拓展和按需选配部署:可根据需要选择要应用的模块、服务,也可自行开发增加模块、服务。

功能说明

认证授权实现

PIGX 通过整合 Spring Security OAuth2 实现整个框架安全认证,并通过扩展实现短信、社交登录等常见的业务常见,原生支持 token 交互访问的业务常见,意味着可以直接通过 PIGX 作为小程序、APP 等其他类型客户端的服务端实现。 @EnablePIGXResourceServer 直接赋予微服务资源服务器能力,避免 oauth2 接入的复杂性。通过扩展支持高性能模式,解决 OAuth 2.0 全流程的性能瓶颈问题,为高性能场景提供业务支持。

[+] 什么是 OAuth2.0

OAuth2 用户是一个标准化的授权协议/框架。按照官方的 OAuth2 定义:OAuth 2.0 授权框架使第三方应用程序来获取对 HTTP 服务的有限访问机会。无论是通过编排资源所有者和 HTTP 服务之间的交互批准的资源所有者,或通过允许第三方应用程序来获取自己的访问权限。 更多资料参考: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

权限管理实现

基于角色的访问控制方法(Role-Based Access Control,简称 RBAC)是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:

提供多租户用户-角色-部门-权限的权限管理模型,确保开发工程师拿来即用。

多租户实现

多租户是指软件架构支持一个实例服务多个组织,每一个用户被称之为租户,软件给予租户可以对系统进行部分定制的能力,如数据独立、菜单个性化、界面颜色或业务规则等,但是他们不能定制修改软件的代码。由于共享开发和维护成本,都某些用户来说,多租户是一种经济的解决方案。PIGX 通过整合 mybatis-plus 多租户插件和重写 Spring Data Redis 模块实现多租户功能,能够实现开发过程无感知的多租户实现。

[+] mybatis-plus 多租户插件介绍

插件地址: https://mybatis.plus/guide/tenant.html 租户共享同一个 Database、同一个 Schema,但在表中增加 TenantID 多租户的数据字段。这是共享程度最高、隔离级别最低的模式。除了一些系统共用的表以外,其他租户相关的表,我们都需要在 sql 不厌其烦的加上 AND t.provider_id = ?查询条件,稍不注意就会导致数据越界,数据安全问题让人担忧。好在有了 MybatisPlus 这个神器,可以极为方便的实现多租户 SQL 解析器

数据处理功能

几乎在任何一个系统中,都离不开权限的设计,权限设计 = 功能权限 + 数据权限,而功能权限,在业界常常是基于 RBAC(Role-Based Access Control)的一套方案。而数据权限,则根据不同的业务场景,则权限却不尽相同,应该根据具体的场景巧妙设计; 且必须在项目开始时进行设计,不像功能权限一样,在项目结束的时候在追加。

数据脱敏指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。 在 PIGX 中只需要在实体字段增加 @Sensitive 注解即可实现敏感数据脱敏。

微信公众号管理

微信公众号是个人或者企业的一个宣传平台,通过开发微信公众号,可以给关注公众号的用户提供更多定制化的服务,进一步可以将服务转化为效益PIGX 基于全网最火的WxJava微信开发 SDK,提供图形化公众号菜单配置、公众号运营数据、粉丝管理、消息处理等,并支持多租户多公众号的管理模块

[+] 什么是 WxJava?

支持包括微信支付、开放平台、公众号、企业微信/企业号、小程序等微信功能的后端开发。 https://github.com/Wechat-Group/WxJava

支付收单模块

我们在一些便利店一定看过如下这种收款码。相比于商家直接把自己微信、支付宝的收款码打印出来,消费者的体验有很大的提升。因为客户可以直接用习惯的微信或者支付宝等直接扫码,不用切换应用。而且还可以选择信用卡等支付方式。所以深受很多小微商家青睐。PIGX 通过IJPay 实现支持微信、支付宝主流支付方式的收款产品,提供渠道管理、订单管理、商品订单、回调管理等功能

[+] 什么是 IJPay ?

IJPay 让支付触手可及,封装了微信支付、QQ 支付、支付宝支付、京东支付、银联支付常用的支付方式以及各种常用的接口。不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。不依赖任何第三方 MVC 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。

协同办公工作流

工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。说的直白一点工作流就是封装好的一种框架,我们利用这种框架来解决需要多个人或者多个部门协同完成的某项工作。PIGX 基于 activiti 最经典版本 5.22 实现协同流程,支持在线实时 modeler 设计流程图,流程节点发起 处理,websocket 通知及其流程节点的图形化查看功能](https://pig4cloud.com/article/8)

接口文档模块

在项目开发中,web 项目的前后端分离开发,APP 开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。Swagger:REST APIs 文档生成工具。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 PIGX 在 网关直接整合 swagger 并提供 Knife4j皮肤,无需在每个微服务整合 swagger,只需要用引入PIGX-common-swagger即可

报表设计模块

PIGX 通过 UReport2 是一款基于架构在 Spring 之上纯 Java 的高性能报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。 在 UReport2 中,提供了全新的基于网页的报表设计器,可以在 Chrome、Firefox、Edge 等各种主流浏览器运行(IE 浏览器除外)。使用 UReport2,打开浏览器即可完成各种复杂报表的设计制作。通过扩展相关源码提供集群存储的相关实现,方便通过已有文件系统保存上下文资料。

大屏设计模块

PIGX 通过 AJ-Report 实现炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。多数据源支持,内置 mysql、elasticsearch、kudu 等多种驱动,支持自定义数据集省去数据接口开发,支持 17+种大屏组件,不会开发,照着设计稿也可以制作大屏。 三步轻松完成大屏设计:配置数据源---->写 SQL 配置数据集---->拖拽配置大屏---->保存发布。

服务监控模块

Spring Boot Actuator 提供了对单个 Spring Boot 的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了 Spring Boot 应用的整个生命周期 。PIGX 通过 Spring Boot Admin 二次开发,支持应用多实例监控、日志在线查看、监控数据持久化及整合 Redis 监控,可以实时查看 Redis 状态

[+] 什么是 Spring Boot Admin

Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过 HTTP 或者使用注册 中心 中进行展示,Spring Boot Admin UI 部分使用 VueJs 将数据展示在前端。

代码生成模块

代码生成可以适用于不同开发领域,在企业开发领域中,最典型的就是增删改查代码生成器。这种技术优点是提高效率,降低成本;本质上就是把有规则的重复性劳动让机器完成,把人解放,人的特长是创造性,重复性是机器和程序的特长。

PIGX 基于 MyBatis Plus 多数据源支持数据库表到代码的生成,支持 model、mapper、service、controller 及其前端的增删改查功能,不再为开发 VUE 发愁,同时支持 Avue、Element 两套前端风格代码生成,并提供基于 maven archetype 的基础微服务框架生成。

PIGX maven archetype 体验, 在本地任意空目录执行以下命令

[+] 什么是 Archetype?

简单的说,Archetype 是 Maven 工程的模板工具包。一个 Archetype 定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成 Maven 工程的方式。Archetype 会帮助作者给用户创建 Maven 工程模板,并给用户提供生成相关工程模板版本的参数化方法。使用 Archetype 提供的好的方法,是开发者能够使用最佳实践来快速的构建和组织一致化的工程。在 Maven 工程中,我们努力使用 Archetype 来尽可能快的给用户提供示例工程,同时也会把 Maven 的最佳实践介绍给新的用户。一个新的用户可以使用工作中的 Maven 工作作为跳板来研究更过的 Maven 中功能。我们也可以使用 Archetype 的添加机制,这样就意味着允许我们抓取 Archetype 中项目片段,并把它们添加到既存的工程中。Maven 网站的 Archetype 就是很好的例子。例如,你可以使用“quick start archetype”来生成一个工程,然后就可以通过其中既存的“site archetype”来快速的创建一个网址工程。你能够使用 Archetype 来做很多这样的事情。在你的团队中可能想要标准化的 J2EE 开发,这需要你提供 EJBs、或者是 WARs、或者是 Web services 的原型。一旦在你团队资源库中创建和部署这些原型,它们就可以在你团队内共享使用。

分布式任务调度

计划任务是指由计划的定时运行或者周期性运行的程序,我们最常见的就是 Linux 的‘crontab’和 Windows 的‘计划任务’。分布式定时任务是指把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。PIGX 支持 图形化集群 Quartz、xxl-job、elastic-job 三种任务框架。

海量文件存储

传统 Web 应用中所有的功能部署在一起,图片、文件也在一台服务器;应用微服务架构后,服务之间的图片共享通过 FTP+Nginx 静态资源的方式进行访问,文件共享通过 nfs 磁盘挂载的方式进行访问,无论是单体架构还是微服务架构下的应用都存在大量图片、文件读写操作,但是昂贵的磁盘空间、高性能服务器无疑增加了运营成本。虽然都实现了对文件的存储、访问,但是系统之间很难达到文件共享,所以文件服务可以形成一个统一的访问标准,降低各个系统之间的互相依赖,提高开发效率、释放业务系统压力。 PIGX 通过整合 minio 解决上述问题,即可使用 minio 自建 OSS ,也可以直接解决兼容 S3 标准的 OSS 云服务(阿里云、华为云、七牛云等等)。

MINIO 文件系统

[+] 什么是 minio

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

动态路由模块

Gateway 的路由配置,常用的有两种方式:Fluent API、配置文件,这两者之间因为配置文件的方式修改起来比较灵活,然后通过 nacos 刷新路由配置,所以大家使用的比较多但是如果我们在网关层需要类似于 Canary Release(金丝雀发布,也称灰度发布)这样的能力的话,那么以上两种配置路由的方式就都显得太笨拙了。 PIGX 通过重写 spring cloud gateway 实现图形化动态更改,非常便捷的实现请求流量管理。

服务高可用模块

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。PIGX 整合 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

整套方案

注册配置中心

PIGX 通过整合 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、动态服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

多数据源

多数据源即在一个应用中配置多个不同的连接池。对于数据源的使用是相对容易的。由于某些架构或业务中, 有时候是要进行多个数据库的操作,这就涉及到多个数据源的创建以及数据源的切换。PIGX 通过整合 dynamic-datasource-spring-boot-starter 为框架提供动态数据源、主从分离、读写分离能力。

单点登录开放平台

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动,能够满足绝大多数开放平台认证授权的需求。让第三方应用通过 PIGX 开发平台,使得自身海量数据资源得到沉淀。PIGX 支持如下图所示的单体框架的直接接入 并提供相关的文档、视频材料。

JFinal系统接入PIGX

分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性,PIGX 基于 LCN 4.1 深度定制,事务操作和代码耦合度极低,支持注册中心的事务发现和自动管理,用法完全兼容 LCN 。

灰度路由

PIGX 通过扩展 Spring Cloud Gateway 实现多种路由策略,例如本地优先、header version 匹配等路由模式,非常方便的实现生产过程中的灰度场景如下图。

容器化部署

Kubernetes 作为 Docker 生态圈中重要一员,是 Google 多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现。无论是公有云还是私有云甚至混合云,Kubernetes 将作为一个为任何应用,任何环境的容器管理框架无处不在。 提供 rancher 、docker-compose 等容器化部署教程,针对 K8S 无需编写资源文件,就能非常方便的部署运行。

应用链路监控

  1. Metrics 指标性统计

比如说我们会去做一个服务的 TBS 的正确率、成功率、流量等,这是我们常见的针对单个指标或者某一个数据库的,这就是 Metrics 单指标分析。

  1. Tracing 分布式追踪

这里提到的是一次请求的范围,也就是我们从浏览器或者手机端发起任何的一次调用,甚至我们可以再推广一点,是一次业务教育,比如说一次订购的过程,从浏览商品到最后下订单、支付、物流、最后交到我们的手上。这是一个流程化的东西,我们需要轨迹,需要去追踪。

ELK 日志收集

ELK 即 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统,在目前这种分布式微服务系统中,通过 ELK 会非常方便的查询和统计日志情况。PIGX 提供相关的部署、使用资料。

数据库读写分离

MaxScale 是 MySQL 的兄弟公司 MariaDB 开发的,相较于国内比较热门的 MyCat、

ShardingSphere 的方案更加成熟,PIGX 提供测试 Docker 镜像、部署文档等资料

开发过程 DevOps

性能说明

环境说明

依赖JVM 配置
OSCentOS 7.6 4C 16G
JDKOpenJDK 1.8.0_232-b09
MySQL5.7 & 并发连接 1000
Jmeter4.0
商业版本4.1

服务配置

服务JVM 配置
pigx-register-Xms256m -Xmx512m
pigx-gateway-Xms1024m -Xmx1024m
pigx-auth-Xms1024m -Xmx1024m
pigx-pigx-upms-biz-Xms1024m -Xmx1024m

线程数 500 & QPS 2000

线程数 1000 & QPS 2000

配套资料

pig4cloud.com 提供 PIGX 相关完整的使用、原理的文档、视频。内容不断更新迭代,方便学习。

1626164986

1626165062

技术支持

工单系统: https://support.pig4cloud.com

免责声明

尊敬的客户,您好!

感谢您长期以来对佩格科技旗下 PIG、PIGX 等产品的支持。

佩格科技公司自推出上述产品以来,给广大用户带来了生活、工作上的便捷与乐趣。佩格科技致力于确保平台以及用户的安全,严格遵守国家相关法律法规,为用户提供一个绿色、安全、健康、便捷的网络生态环境。为此,佩格科技现就产品销售、知识产权保护、禁止行为等方面,发表以下声明:

1、佩格科技一直以来是通过其官网https://pig4cloud.com展示产品信息,以官网上介绍的销售联系方式进行直接销售,没有授权分销商,也没有任何分公司、代理商、办事处、经销商等销售佩格科技旗下的产品。

2、客户不得利用佩格科技的产品从事非法行为,客户应当合法合规的使用产品。佩格科技发现客户在使用产品时有任何的非法行为,有权解除商业授权停止技术支持,并配合有关机关进行调查或向政府部门举报。佩格科技不承担客户因非法行为造成的任何法律责任

3、佩格科技不提供任何形式的保证。所有与使用本站相关的资源直接风险均由客户承担。佩格科技提供的所有代码均为可运行实例,由于客户环境与开发环境不一致,并不对性能、适用性、适销性或/及其他方面提供任何保证。

佩格科技一直坚持合法合规的开发、销售软件产品,请客户遵照国家法律购买和使用佩格科技的产品。

特此声明。

关于我们

邮箱: sw@mail.pigx.vip

公众号: pigcloud

电话: 17034642119

感谢阅读,感谢信任。