Pig,开源的微服务开发平台
开源中国热门开源项目
基于Spring Cloud最完美实践
码云GVP最有价值开源项目
Loading...
请注意:仅支持Chrome浏览器预览。 内容较多,建议开启左上角大纲视图
大纲
prev
next
next
 
 
 
 
PigX Microservice Architecture
系统白皮书
──

+ 版本 | v3.8.0 +




pig4cloud
COPYRIGHT © pig4cloud. ALL RIGHTS RESERVED.

PigX Microservice Architecture<br>系统白皮书<br>──<br><br>+ 版本 | v3.8.0 +<br><br><br><br><br>pig4cloud<br>COPYRIGHT © pig4cloud. ALL RIGHTS RESERVED.关于PigX架构说明架构图模块说明 功能说明认证授权实现权限管理实现多租户实现数据处理功能微信公众号管理支付收单模块协同办公工作流接口文档模块服务监控模块代码生成模块分布式任务调度海量文件存储动态路由模块服务高可用模块整套方案注册配置中心多数据源分布式事务灰度路由容器化部署应用链路监控ELK日志收集数据库读写分离单点登录开放平台开发过程DevOps配套资料技术支持联系我们<br><br><br><br><br><br><br><br><br><br><br>The End

关于PigX

pigx 基于最新Spring Boot、 Spring Cloud、 OAuth2 的RBAC 权限管理系统。是开源pig 的升级版本,提供更多生产功能,致力于企业Spring Cloud 开发实践,包含常见业务场景。

pig 是码云GVP最有价值开源项目、2018 年度最热门开源项目TOP

架构说明

架构图

模块说明

功能说明

认证授权实现

pigx 通过整合 spring security oauth2 实现整个框架安全认证,并通过扩展实现短信、社交登录等常见的业务常见,原生支持 token 交互访问的业务常见,意味着可以直接通过 pigx 作为小程序、APP 等其他类型客户端的服务端实现。 @EnablePigxResourceServer 直接赋予微服务资源服务器能力,避免oauth2 接入的复杂性。

[+] 什么是 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)是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是: 1、减小授权管理的复杂性,降低管理开销; 2、灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

提供多租户用户-角色-部门-权限的权限管理模型,方便扩展。

多租户实现

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

服务监控模块

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

[+] 什么是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 是一个基于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 为框架提供动态数据源、主从分离、读写分离能力。

分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性,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 镜像、部署文档等资料

单点登录开放平台

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

开发过程DevOps

DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值。DevOps 对团队意味着什么?DevOps 使以前孤立的角色(开发、IT 运营、质量工程和安全)可以协调和协作,以生产更好、更可靠的产品。通过采用 DevOps 文化、做法和工具,团队能够更好地响应客户需求,增强对所构建应用程序的信心,更快地实现业务目标。结合pigx 自身灰度路由功能,能够非常方便的实现通用服务和业务微服务完全隔离,工程师无需本地启动通用服务即可完成业务开发和调用链路的完全隔离,告别微服务开发高配置机器的需求,结合 Jenkins、GitLab 实现开发过程CI。

配套资料

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

技术支持

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

不存在
存在
消息通知
技术支持
邮件通知
遇到问题
搜索工单
创建工单
解决
技术团队
提问人
结束

联系我们

QQ : 3130998334

 

微信: XXXX












The End