PIG Microservice Architecture
系统白皮书
──

+ 版本 | v5.4 +
佩格科技
COPYRIGHT © pig4cloud. ALL RIGHTS RESERVED.

关于 PIG 商业版

PIG商业版应用微服务、容器、DevOps等云原生技术,封装了大量技术开发包、技术应用组件、技术场景实现能力,并支持SaaS模式应用,提供了一个可支持企业各业务系统或产品快速开发实现的微服务应用数字化融合平台,富含各类开箱即用的组件、微服务业务系统,助力企业跨越Cloud(IaaS/PaaS)与自身数字化的鸿沟,共享业务服务的组合重用,为企业服务化中台整合、数字化转型提供强力支撑,也为企业提供了最佳架构实践。

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

商业版提供

 

架构说明

架构图

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

基础架构

高可用架构

主要技术栈

商业版技术栈

商业版架构

后端技术栈

前端技术栈

关于技术选型 ElementPlus 详细说明

Element Plus 和 Ant Design Vue 都是基于 Vue.js 的 UI 组件库,它们具备一系列可复用的组件和丰富的功能,并且是当前国内主流的两个 UI 组件库。

  • Element Plus 是饿了么前端团队推出的开源项目,是对 Element UI 的升级版。它采用了 TypeScript 编写,提供了一套易于使用、响应式的组件,支持自定义主题、国际化等特性。Element Plus 的设计风格简洁明快,适用于企业级应用界面的构建。
  • Ant Design Vue 是 Ant Design 的 Vue 版本,由阿里巴巴前端团队开发和维护。它是一个成熟的 UI 组件库,以设计原则、可访问性和用户体验为核心,在提供美观、高效、易用的组件和布局的同时,也包含了丰富的样式和配套工具,帮助开发人员快速构建精美的界面。

两者都是优秀的前端 UI 框架,难分伯仲。然而,考虑到非前端工程师的上手难度和第三方组件丰富度,我们选择了 Element Plus。我们通过 https://oss-compass.org/ 对这两个开源项目的生产力、稳健性和创新力进行了评估,相关指数显示 Element Plus 在各个方面均领先于 Ant Design Vue。(指数获取

模块说明

技术特色

基于 Java 主流开源技术构建

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

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

PIGX 微服务开发平台采用微服务架构设计,支持构建、测试、部署和管理微服务架构的平台,它的优势包括:

  1. 提高开发效率:微服务开发平台可以提供一系列的工具和服务,例如自动化构建、测试和部署工具,使得开发人员能够更快速、更高效地开发和部署微服务。
  2. 更好的可扩展性:微服务开发平台提供的微服务架构可以更容易地进行水平扩展,可以快速增加或减少服务实例以满足不同的负载需求,从而提高系统的可扩展性。
  3. 更高的灵活性:微服务开发平台的架构可以根据需求进行自由的组合和定制,从而提供更灵活的解决方案,而不是单一的解决方案。
  4. 更好的容错性:微服务开发平台的架构可以在单个服务出现故障时保持整个系统的运行,同时还可以快速诊断和恢复故障服务,从而提高了系统的容错性。
  5. 更好的可维护性:微服务开发平台的架构可以将系统分解为多个小型服务,每个服务都可以独立地进行开发、测试和部署,从而降低了代码耦合度,提高了代码的可维护性。

综上所述,PIGX 微服务开发平台可以提供更高效、更灵活、更可扩展和更可维护的解决方案,适用于现代化的应用程序开发。

服务无状态

PIGX 微服务开发平台采用无状态化设计,可以提高系统的性能、可靠性和灵活性,并降低系统的成本, 它具备能力包括:

  1. 更高的可伸缩性:由于无状态服务不保存任何客户端相关的数据,因此它们可以更容易地进行水平扩展。水平扩展可以快速增加或减少服务实例以满足不同的负载需求,从而提高系统的可伸缩性。
  2. 更好的容错性:无状态服务可以更容易地进行故障转移和恢复,因为它们的状态不会影响系统的稳定性。当一个服务实例出现故障时,系统可以自动将流量转移到其他可用的实例上,从而保持整个系统的正常运行。
  3. 更好的性能:无状态服务可以更快速地响应客户端请求,因为它们不需要在每个请求之间维护和恢复状态。此外,由于水平扩展可以提供更多的服务实例,因此可以更快速地处理大量的并发请求。
  4. 更低的成本:无状态服务通常比有状态服务更容易编写、测试和维护,因为它们不需要考虑状态的管理和恢复。此外,水平扩展可以使用低成本的硬件来处理大量的请求,从而降低了系统的成本。

 

前后端分离

PIGX 微服务开发平台提供完整的 REST API 接口,采用前后端分离技术,其好处包括:

  1. 更好的协作性:前后端分离架构可以让前端和后端开发人员分别专注于各自的领域,可以同时高效的支持移动 APP、Web、小程序等应用的开发场景,减少了彼此的依赖和干扰,从而提高了开发效率和协作性。
  2. 更好的可扩展性:由于前后端分离架构将前端和后端分离,因此可以更容易地进行横向和纵向的扩展。横向扩展可以通过增加前端和后端服务器的数量来增加系统的吞吐量,而纵向扩展可以通过增加前端和后端服务器的硬件配置来提高系统的性能。
  3. 更好的维护性:由于前后端分离架构将前端和后端分离,因此可以更容易地维护和升级系统的各个部分。如果需要修改前端或后端的某个功能,可以只修改相应的代码,而不需要影响到整个系统的其它部分。
  4. 更好的安全性:由于前后端分离架构将前端和后端分离,可以更好地控制前端和后端之间的数据流动和访问权限,从而提高了系统的安全性。使用 Spring Authorization Server OAuth 2.0 等认证和授权协议来保护系统的数据安全性。
  5. 更好的灵活性:由于前后端分离架构将前端和后端分离,可以更容易地切换或替换前端或后端的技术栈和框架,从而提高了系统的灵活性和可扩展性。例如,可以在不影响系统其它部分的情况下,替换前端或后端的某个框架或组件,以提高系统的性能或功能。

 

高可用

PIGX 微服务开发平台通过合理地配置以下这些技术手段,可以保证服务的连续性、性能和可用性,从而满足用户的需求。

  1. 集群化部署:在多个节点上部署同一个服务,可以提高服务的可用性。当某个节点出现故障时,可以将请求自动转发到其它节点上,保证服务的连续性。
  2. 负载均衡:负载均衡可以将客户端请求分配到不同的服务节点上,从而避免某个节点负载过重而导致服务不可用。支持常用的负载均衡算法包括轮询、随机、哈希等。
  3. 故障转移:当某个服务节点出现故障时,需要自动将请求转移到其它可用的节点上,保证服务的连续性。
  4. 自动扩缩容:自动扩缩容可以根据系统的负载自动增加或减少服务节点的数量,保证系统的性能和可用性。
  5. 数据复制和备份:数据复制和备份可以保证数据的可靠性和可用性。


主从复制:主机宕机后切换到备机;多主复制:可同时读写任意一个节点,数据最终一致(MariaDB Galera)。

基于 Spring Cache 多租户设计支持 Redis 集群高可用。

可扩展

企业业务需求通常比较复杂,因此实现这些需求的业务系统在代码层面上也是非常复杂的,如果没有合理的结构来组织这些重要代码,对企业后期开发或调整新业务逻辑、维护业务系统等都会造成麻烦,甚至有可能导致重构功能而浪费人力物力。模块化设计与开发,将应用拆分为多个模块,每个模块都有独立的功能和职责,可以方便地进行扩展和维护。通过模块化设计,可以避免应用的不必要耦合,提高代码的可读性和可维护性。

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

功能说明

认证授权实现

为什么要拥抱 OAuth 2.0 协议?
  • OAuth 2.0 是一种基于 HTTP 的协议,可用于 Web 应用程序和移动应用程序等各种场景,因此具有很高的可扩展性。此外,它提供了许多不同类型的授权流程,以满足各种应用程序的需求。
  • OAuth 2.0 提供了一组标准化的 API,使得应用程序可以方便地与各种不同的授权提供程序进行集成。这样可以简化开发过程,减少了开发人员的工作量。

 

翻阅市面竞品我们团队总结目前主流方案如下

 

方案思路成熟度复杂度兼容性评价
网关 JWT 认证鉴权适用于轻量级认证体系,不适合于企业技术中台建设
OAuth 协议自行搭建认证中心不推荐
成熟 OAuth 协议认证产品目前市面上 Keycloak、Spring Authorization Server 都是很成熟的认证授权解决方案

oauth 2.0 示意图

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

 

什么是 Spring Authorization Server

OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。Spring Authorization Server 项目作为 Spring 官方当前阶段主力维护的 OAuth 认证服务,目前已经发布 1.0 正式版本。经过 PIG 开源版长达半年的测试试错,目前商业版已完整迁移至 Spring Authorization Server。 更多资料参考: http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

权限管理实现

PIGX 微服务开发平台基于角色的访问控制方法(Role-Based Access Control,简称 RBAC)是目前公认的解决大型企业的统一资源访问控制的有效方法。基于角色的访问控制是一种常见的访问控制方法,它将用户的权限赋予不同的角色,然后将角色与资源的访问权限相关联。在基于角色的访问控制中,用户不直接被赋予权限,而是被分配到一个或多个角色,这些角色被授予访问资源的权限。以下是基于角色的访问控制方法的一些好处:

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

权限模型

多租户实现

多租户是指软件架构支持一个实例服务多个组织,每一个用户被称之为租户,软件给予租户可以对系统进行部分定制的能力,如数据独立、菜单个性化、界面颜色或业务规则等,但是他们不能定制修改软件的代码。由于共享开发和维护成本,对某些用户来说多租户是一种经济的解决方案。

对于多租户架构,需要在数据库和缓存中都实现租户的隔离,以确保不同租户的数据不会混淆在一起。

PIGX 微服务开发平台通过重写 mybatis-plus 多租户插件和 Spring Data Redis 模块实现多租户功能,能够实现开发过程无感知的多租户实现。(开发过程无感知是指在开发应用程序时,开发人员不需要考虑多租户的实现细节,也不需要对应用程序进行任何修改即可完成数据隔离)。

多租户数据隔离级详细说明

租户共享默认使用同一个 Database、同一个 Schema,但在表中增加 tenant_id 多租户的数据字段。

  • 简化开发:开发过程不需要考虑多个数据源跨库查询和事务管理等,让应用可用性得到保证。
  • 简化运维:共享相同的数据库和架构环境,这简化了数据管理和维护的工作量。管理员可以使用相同的工具和流程来管理所有租户的数据。

数据量很大,这种方案可行吗?

  • 在我看来,市面上大部分竞品都没有一个成熟完善的解决方案来应对分库隔离的业务场景。分库隔离需要考虑的因素很多,包括硬件资源管理、分布式事务、跨库查询、数据划分策略、扩展性和负载均衡。
  • 当然,分库策略并不是解决数据量大问题的"银弹"。在单个租户业务数据量较大的情况下,我们还需要继续进行拆分。

PIGX 推荐给大家的是基于字段快速实现租户隔离的业务,可以简化开发过程。随着业务数据量的增加,我们可以选择使用 TiDB、OceanBase 等 NewSQL 解决方案(PIGX 支持 TiDB 4+,OceanBase 3+)。这些解决方案适用于高可用、强一致性要求较高、数据规模较大等各种应用场景。专业的事情应该交给专业的中间件来处理。

数据处理功能

数据权限过滤

几乎在任何一个系统中,都离不开权限的设计,权限设计 = 功能权限 + 数据权限,而功能权限,在业界常常是基于 RBAC(Role-Based Access Control)的一套方案。数据权限功能是指在应用程序中实现的一种访问控制机制,它可以确保只有授权的用户或角色才能访问特定的数据。数据权限功能的设计意义不仅在于保护数据的安全性和完整性,还可以提高应用程序的可用性和易用性。通过限制用户的访问范围,可以减少不必要的数据查询和操作,从而提高应用程序的响应速度和性能。同时,数据权限功能还可以提高应用程序的易用性,因为它可以根据用户的角色和权限来动态显示不同的数据和功能,从而使用户只看到他们需要的数据和功能,而不会感到被过度干扰。PIGX 微服务开发平台支持常见角色权限、组织权限、以及自定义数据权限授权策略,开发过程通过中仅需在 Mappe 增加 DataScope 参数即可实现数据权限拦截。

数据处理

连表查询增强

MyBatis Plus 封装的 Mapper 不支持联接,如果需要支持,就必须自行实现。然而,在大多数业务场景中,都需要进行多表联接。在 MyBatis-Plus 的基础上,只进行增强而不进行改变,以简化开发并提高效率。 我们以 APP 模块的文章(article)列表展示功能,前端列表同时需要显示关联表分组(collect)的名称,通过如下的如法即可实现关联查询

对应自动生成的连表查询 SQL 如下:

数据脱敏功能

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

数据脱敏

字段审计

低代码生成模块

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

微服务构建器

使用 PIGX maven archetype (微服务构建器)生成的业务微服务,具有以下优点:首先,它们与原有开发平台解耦,这意味着您可以独立地升级和维护这些微服务,而不会对其他部分造成影响。其次,这些微服务具有清晰的接口和功能,可以更加方便地进行二次开发和定制化,以满足特定的业务需求。此外,借助于PIGX 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 的原型。一旦在你团队资源库中创建和部署这些原型,它们就可以在你团队内共享使用。

代码生成器

PIGX可以快速将数据库表映射为代码,包括model、mapper、service、controller等,同时还提供了前端表格、表单、父子表、导入导出功能的实现,让您能够以“零代码”的方式完成常见功能的开发。

我们的产品具有以下亮点:

  1. 高度自定义:支持多种数据库类型的代码生成,并且可以根据您的需求进行元数据自定义,包括字段映射和Velocity模板的自定义。这使得代码生成更加灵活,满足不同项目的特定要求。
  2. 灵活的代码生成方式:您可以选择将生成的代码直接写入到IDE中,方便您在开发环境中进行进一步修改和调整。同时,还支持将生成的代码导出为zip包,方便与团队成员共享和部署。
  3. 即时预览:我们提供了生产代码的即时预览功能,您可以在生成代码之前查看代码的效果,确保生成的代码符合您的期望。这样可以节省您的时间和精力,减少后期的修改和调试工作。

PIGX旨在帮助开发人员高效、快速地完成业务代码的开发工作,提升开发效率,降低开发成本。无论是大型企业级项目还是小型团队的快速原型开发,PIGX都能为您提供强大的支持。

 

表单设计器

引入了强大的表单设计器Vform,让用户可以通过图形化界面对生成的表单进行调整和编辑。这一功能使得在线修改更加高级化,用户可以直观地看到修改的效果。同时,我们还实现了与开发平台的接口联调,例如支持上传和字典映射等功能。这种所见即所得的设计理念极大地提升了用户的开发体验,使得表单设计更加便捷、高效。无论是美化表单外观,还是定制化表单逻辑,我们的产品都能帮助用户轻松实现。

微信公众号管理

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

什么是 WxJava?

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

支付收单模块

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

扫码支付

什么是 IJPay ?

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

APP 管理

PIGX 提供了一款基于 Uniapp、uView UI 和 Vue3 的移动端解决方案(详细说明参考如下移动端解决方案章节内筒)。随着移动互联的普及,传统的 PC 阅读形式已经无法满足终端用户的需求。PIGX 提供了基于移动端展示的 CMS 信息发布系统解决方案,确保信息发布的准确性和及时性。

协同办公工作流

工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。说的直白一点工作流就是封装好的一种框架,我们利用这种框架来解决需要多个人或者多个部门协同完成的某项工作。PIGX 基于 flowable 以简化动态表单和流程设计器,并实现类似于企业微信、钉钉等企业常见的简易审批工作流。通过改进后的动态表单设计器,用户可以轻松创建和编辑动态表单,支持自定义字段和验证规则。而流程设计器则提供了直观的拖放界面,使得审批流使用体验类似于企业微信或钉钉。我们相信这些改进将极大地提升用户的工作效率和体验。

接口文档模块

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

报表设计模块

PIGX 通过 UReport2、jimu 两款企业级在线报表设计工具。 是一款基于架构在 Spring 之上纯 Java 的高性能报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。提供了全新的基于网页的报表设计器,可以在 Chrome、Firefox、Edge 等各种主流浏览器运行(IE 浏览器除外)。使用报表设计模块打开浏览器即可完成各种复杂报表的设计制作。通过扩展相关源码提供集群存储的相关实现,方便通过已有文件系统保存上下文资料。积木报表,是一款免费的企业级 Web 报表工具,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!

大屏设计模块

PIGX 通过 GoView 实现炫大屏展示,GoView 是一个高效的拖拽式低代码数据可视化开发平台,将图表或页面元素封装为基础组件,无需编写代码即可制作数据大屏,减少心智负担。当然低代码也不是 “银弹”,希望所有人员都能理智看待此技术。

三步轻松完成大屏设计:配置数据源---->写数据集---->拖拽配置大屏---->保存发布。

服务监控模块

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 将数据展示在前端。

分布式任务调度

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

xxl-job

海量文件存储

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

文件存储

什么是 minio

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

动态路由模块

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

动态路由

服务高可用模块

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

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

整套方案

单体架构解决方案

PIGX 单体架构

PIGX 提供一套针对面向中小企业的 SOA 单体解决方案,具体而言该解决方案的特点包括:

    • 单体架构:该解决方案是一个单体架构,可以在一个进程中运行。相对于分布式系统而言,单体架构更加简单易用,对于中小企业而言,减少复杂度可以降低开发和维护成本。
    • 合理的分包设计:该解决方案进行了合理的分包设计,将业务逻辑、数据访问、工具类等模块分开,提高了代码的可读性和可维护性,同时也为后期将系统拆分为微服务做好了准备。
    • 易于迁移为 Spring Cloud 微服务架构:该解决方案在设计时考虑到后期可能需要将系统拆分为微服务,一旦需要将系统拆分为微服务,只需要将单体应用拆分为多个服务,并添加 Spring Cloud 注册发现相关组件即可。
    • 完全兼容 PIGX 技术栈: 该解决方案实施标准、开发步骤、工具类等完全兼容 PIGX 微服务架构,方便用户在单体架构、微服务架构中进行切换过渡。

单体架构通常适用于小型项目,它将所有的功能模块都集中在一个应用程序中,实现简单、易于开发、测试和维护。但随着项目规模的增长,单体架构的代码复杂度也会增加,单点故障的风险也会增加,扩展性和可靠性会变得有限。 微服务架构适用于需要快速迭代、灵活性和扩展性的项目。它将应用程序拆分成独立的、可独立部署和升级的服务模块,实现服务之间的解耦,提高了系统的可靠性、可扩展性和灵活性。但是,微服务架构的设计和实现比较复杂,需要相应的技术能力和管理经验,同时,分布式系统的特点也带来了一定的挑战,例如服务治理、容错处理、安全性等方面需要注意。

移动端解决方案

PIGX 提供了一款基于 Uniapp & uView UI & Vue3 的移动端解决方案,使用 Vue.js 作为底层框架。该解决方案支持移动端代码生成,让后端开发者可以使用一种统一的语言编写一份代码,在多个平台上运行,从而减少了开发和维护的工作量。同时,PIGX 提供了丰富的插件库和组件库,包括丰富的 UI 组件、常用的第三方库、图标库等等。这些库可以大大简化应用程序的开发过程,提高应用程序的质量和可靠性。不论您是刚刚入门的开发者还是有经验的专业人士,PIGX 都是一个不可错过的绝佳选择。我们的解决方案能够轻松节省您的时间和精力,提高您的开发效率和工作质量。

在移动应用的开发过程中,常用的架构模型有很多,其中以 TOC 模型最为常见。TOC 模型是指“技术-组织-客户”三者之间的协作模式。在此模型中,技术方负责设计和开发系统,组织方( sys_user)负责管理和维护系统,客户方(app_user)则是系统的最终用户。对于开发者来说,PIGX 提供了一个独立的移动端用户、权限和菜单控制模式,极大地方便用户的开发工作。用户只需要基于此模式进行开发,即可快速构建出具有完善用户权限控制的移动端应用。

小程序示例 小程序码 微信扫码预览

注册配置中心

随着服务数量的不断增加,服务的发现、配置和管理变得越来越复杂。这时,Nacos 作为一种服务基础设施,就能够帮助开发者更好地管理微服务平台。

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

小程序示例 小程序码

多数据源解决方案

PIGX 整合了dynamic-datasource-spring-boot-starter,提供了动态数据源、主从分离、读写分离的能力。通过使用 PIGX,我们可以方便地实现多数据源的创建和切换。动态数据源是指可以在运行时动态地切换数据源,这样我们就可以灵活地处理不同的业务需求,同时可以降低代码的耦合性。主从分离和读写分离是指将数据库中的读操作和写操作分别分配到不同的数据库服务器上,这样可以提高数据库的读取效率和可用性。

使用 PIGX 可以轻松地实现多数据源,只需要在应用程序中配置多个不同的数据源,然后使用动态数据源功能进行数据源的切换。同时,我们还可以使用主从分离和读写分离来优化数据库的读写效率和可用性。

单点登录开放平台

授权码模式(authorization code)是 OAuth 2.0 协议中功能最完整、流程最严密的授权模式。它的优势主要包括以下几个方面:

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

常见系统接入开放平台示例

分布式事务

分布式事务是指在分布式系统中执行的涉及到多个事务参与者的事务操作,包括多个事务参与者、事务协调者、资源服务器和事务管理器等分布式系统的节点。由于分布式事务的参与者分布在不同的服务器上,而且分别属于不同的应用程序,因此分布式事务需要保证所有的参与者在一次事务中的操作要么全部成功,要么全部失败,从而保证所有数据的一致性和完整性。

在实现分布式事务的过程中,需要使用分布式事务解决方案。PIGX 支持 LCN 和 Seata 两种常见的分布式事务解决方案,这些解决方案可以帮助开发人员更高效、可靠地进行分布式事务处理。具体来说,LCN 是一种基于 Spring Cloud 的分布式事务解决方案,可以将多个不同的事务操作作为一个整体进行控制。Seata 则是一种开源的分布式事务解决方案,提供了高效、可靠的分布式事务管理功能,可以实现分布式事务的高效处理。

使用 PIGX 可以轻松地实现分布式事务,同时降低事务操作和代码之间的耦合度。通过 PIGX 提供的 LCN 和 Seata 两种分布式事务解决方案,开发人员可以在分布式系统中实现复杂的事务操作,并确保数据的一致性和完整性。这对于企业级应用程序来说非常重要,因为分布式事务的处理直接关系到系统的可靠性和稳定性。

LCN seata

灰度路由

灰度路由(灰度发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行 A/B testing,即让一部分用户继续用产品特性 A,一部分用户开始用产品特性 B,如果用户对 B 没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到 B 上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

简单来讲,灰度发布主要就是涉及到老版本和新版本间的平衡过渡问题,暂且我们定义为老版本 A 和灰度版本 B。实际上灰度发布重点需要考虑两个问题,其一就是新的灰度版本如何增量部署到个别服务器容器集群,同时在灰度版本最终验证通过后,对灰度版本进行全集群增量部署;其二是解决不同的用户登录,如何根据指定的策略,将特定的用户路由到灰度版本上的问题。PIGX 通过扩展 Spring Cloud Gateway 实现多种路由策略,例如本地优先、header version 匹配等路由模式,非常方便的实现生产过程中的灰度场景如下图。

灰度路由1 灰度路由2

容器化部署

微服务架构的优势之一是可以将应用程序拆分为多个小型的、自治的服务,这些服务可以独立部署、升级和扩展。然而,这也带来了新的挑战:如何有效地管理和部署这些服务。这时,容器化技术就能够派上用场。容器化是一种轻量级的虚拟化技术,可以将应用程序及其所有依赖项打包到一个可移植的容器中,以便在不同的环境中进行部署和运行。使用容器化技术,可以实现以下好处:

  1. 简化部署:容器化技术可以使应用程序的部署更加简单和可重复。将应用程序及其所有依赖项打包到一个容器中,可以消除部署时的依赖项问题,并且可以在不同的环境中重复使用相同的容器。
  2. 提高可移植性:使用容器化技术可以提高应用程序的可移植性。容器可以在不同的平台和环境中运行,例如开发、测试和生产环境。这使得开发团队能够更快速、更有效地迭代和部署新功能。
  3. 增强安全性:使用容器化技术可以增强应用程序的安全性。容器隔离了应用程序和其运行环境,使得应用程序的攻击面更小。同时,容器也可以提供可靠的运行时环境,防止应用程序受到潜在的威胁和攻击。
  4. 更高的弹性和可扩展性:使用容器化技术可以更加轻松地进行应用程序的扩展和缩减。通过添加或删除容器,可以根据需要增加或减少应用程序的负载。这使得应用程序能够更加弹性地应对流量峰值和波动。

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

rancher K8S

应用链路监控

PIGX 支持直接接入 Apache SkyWalking 实现应用性能监控,SkyWalking 对微服务、云原生和容器化应用提供自动化、高性能的监控方案。 可以在服务依赖复杂且多语言环境下,获取服务对应的指标,以及完整而有意义的性能视图。

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

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

SkyWalking1 SkyWalking2

ELK 日志收集

PIGX 支持日志配置 logback 支持直接接入 ELK 日志系统,方便在分布式系统下的日志收集,故障分析。ELK 实际上是三个工具,Elastricsearch + LogStash + Kibana,通过 ELK,用来收集日志还有进行日志分析,最后通过可视化 UI 进行展示。一开始业务量比较小的时候,通过简单的 SLF4J+Logger 在服务器打印日志,通过 grep 进行简单查询,但是随着业务量增加,数据量也会不断增加,所以使用 ELK 可以进行大数量的日志收集和分析。

日志采集过程

分库分表读写分离

PIGX 支持与 shardingsphere-jdbc 整合来实现分库分表。shardingsphere-jdbc 是 Apache ShardingSphere 项目中的一个功能组件,提供了数据分片、读写分离、数据加密、影子库压测等多种功能。此外,shardingsphere-jdbc 还支持多种 SQL 和协议,包括 MySQL、PostgreSQL、SQLServer、Oracle 等主流数据库。通过插件化的方式,开发人员可以很方便地将 shardingsphere-jdbc 集成到自己的应用程序中,从而实现分布式数据管理和分库分表功能。

Apache ShardingSphere 是一个致力于可插拔架构的开源项目,支持多种关系型数据库和 NoSQL 数据库,包括 MySQL、PostgreSQL、Oracle、SQL Server、MongoDB 等。ShardingSphere 提供了多种组件和扩展点,能够灵活地实现各种功能,例如数据分片、读写分离、数据加密、影子库压测等。同时,ShardingSphere 还支持多种 SQL 和协议,能够满足各种场景下的需求。

通过与 shardingsphere-jdbc 的整合,PIGX 可以实现高效的分库分表功能,并能够处理分布式环境下的大规模数据管理。此外,shardingsphere-jdbc 还提供了许多其他的功能和扩展点,例如分布式事务、分布式锁等,能够满足复杂的分布式应用场景。使用 shardingsphere-jdbc 和 PIGX 的整合,开发人员可以快速构建高可用性、高性能的分布式应用程序。

ShardingSphere 分库

开发过程 DevOps

  1. 当今的软件开发趋势是微服务架构和 DevOps,这两种技术在软件开发和运维方面都有很多好处。将 PIGX 微服务开发平台与 DevOps 结合,可以为软件开发团队带来以下好处:

    1. 更快的交付:通过使用 DevOps 工具,可以将软件开发的过程自动化,例如构建、测试、部署等。这可以使软件开发团队更快地交付产品,从而更快地满足客户的需求。
    2. 更高的质量:DevOps 自动化工具可以在每个阶段检查代码和构建的质量,例如代码质量、单元测试覆盖率、安全性等。这可以减少错误和缺陷,提高软件的质量和可靠性。
    3. 更高的可靠性:使用 DevOps 工具可以自动监控系统,及时发现和解决问题,减少系统停机时间和故障。这可以提高系统的可靠性和稳定性。
    4. 更好的团队协作:使用 DevOps 工具可以提高团队的协作效率,例如版本控制、自动化构建、自动化测试等。这可以使团队成员更好地合作,共同完成项目。
    5. 更高的安全性:使用 DevOps 工具可以在整个开发和部署过程中加强安全性,例如代码审查、漏洞扫描、安全测试等。这可以减少安全漏洞的风险,提高系统的安全性。

性能说明

环境说明

依赖JVM 配置
OSCentOS 7.9 4C 16G
JDKZulu21.28+85-CA
MySQL8.0.22 & 并发连接 1000
Jmeter4.0
商业版本5.3

服务配置

服务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 相关完整的使用、原理的文档、视频。内容不断更新迭代,方便学习。

#配套文档|30万字 #(Lm) #配套视频|120小时 #(Lm)

技术支持

工单系统

技术工程师为您提供产品配置指导、故障排查等技术支持 提交工单

安全订阅

PIGX 提供了一项安全订阅服务,可以为企业、单位和个人等使用开源软件的人提供漏洞分析和预警服务。这个服务会定期分析漏洞并及时推送预警信息,从而帮助大家更好地保障数据安全。此服务还使用漏洞知识图谱技术,加强了开源软件漏洞的整理和监督,提高了漏洞预警和基础设施保护的能力。同时,这个服务也支持安全信息搜集、分析和共享等基础服务,从而形成了漏洞分析和预警消息订阅的规范化管理依据。

内部群

谁在使用

知名客户

免责声明

尊敬的客户,您好!

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

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

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

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

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

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

特此声明。

联系我们

微信扫码联系我们

感谢阅读,欢迎使用