分类 Paas 下的文章

Spring Cloud Gateway是Spring官方基于Spring5.0、SpringBoot2.0、Netty和Project Reactor等技术开发的网关,旨在为微服务框架提供一种简单而有效的统一的API路由管理方式,统一访问接口。

Spring Cloud Gateway作为Spring Cloud生态体系中的网关,目标是替代Netflix的Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等等。

01 SpringCloud Gateway 特点

SpringCloud Gateway是一款业务友好型的网关,适应于业务网关场景,具有以下特点:

  • 非阻塞IO采用非阻塞 IO 网络框架支撑,reactor 模式,采用更少的资源完成请求

  • SC组件无缝集成与 Spring Cloud生态组件无缝集成,符合大部分业务系统的集成需求,集成成本低

  • Reactive编程基于WebFlux响应式Web模型,事件驱动与非阻塞 IO 结合,满血使用 CPU 性能,性能吞吐量更优秀

  • 简单易开发只需掌握Route原理,会编写Filter即可上手网关开发

  • 开箱即用监控机制基于SpringBoot Actuator提供完整开箱即用的生产级监控

02 SpringCloud Gateway 构成

SpringCloud Gateway由三部分组成:Route、Predicate、Filter。

  • 路由Route:即一套路由规则,是集URI、predicate、filter等属性的一个元数据类。

  • 断言Predicate:Java8函数断言,这里可以看做是满足什么条件的时候,route规则进行生效。允许开发者去定义匹配来自于Http Request中的任何信息,如请求头和参数。

  • 过滤器Filter:filter针对请求和响应进行增强、修改处理。filter可以认为是Spring Cloud Gateway最核心的模块,熔断、安全、逻辑执行、网络调用都是filter来完成的,其中又细分为gateway filter和global filter,区别在于是具体一个route规则生效还是所有route规则都生效。

03 SpringCloud Gateway 整体架构


宏观层面

SpringCloud Gateway是一款非常好的衔接器。首先是衔接内部网络与外部应用,让所有访问内部网络的流量需经过网关的访问控制,统一提供给外部应用,避免不受控的非法访问,增强系统安全性。作为实现内外部的衔接的组件,网关首先建立内部微服务纳管的协议,无论协议是否相同,技术栈是否匹配,都可以通过技术手段纳管到网关中。

其次网关与外部微服务也建立起统一的访问协议,来对外提供访问。

在整个访问的过程中,网关核心在于将请求流量由上游发起经过网关到下游的微服务,在流量出入的过程中,网关在路由策略,协议转换、过滤、API组合等方面构建网关的核心能力。

微观层面

SpringCloud内部有Route,同样也是一个非常紧密的左手拉右手的效果,一方面Route通过Predicate来匹配来自外部应用的访问流量,另一方面通过Route来找到目标微服务。

从宏观到微观,网关起到了将外部应用的访问,按照一定的访问策略,访问目标微服务的中间件的作用。

以一次请求看SpringCloud Gateway的调用流程:

  • RoutePredicateHandlerMapping:通过lookupRoute方法,遍历所有路由列表,一个路由一个路由的正则匹配,指导找到第一个可以匹配的Route路由。

  • FilteringWebHandler:创建过滤器链,按顺序调用Filter,filter又分为PreFilter前置过滤器和PostFilter后置过滤器。

  • 整个请求过ServerWebExchange作为上下文贯穿启动,对于一次请求的信息从ServerWebExchange获取,修改则保存在ServerWebExchange中,注意基于Reactive特性,ServerWebExchange是只读的,修改Exchange需重新builder

04 SpringCloud Gateway 路由条件匹配器

SpringCloud Gateway路由条件匹配器是一个断言,根据Http Request中的请求报文来进行匹配,当满足条件则路由生效。

  • After:匹配在指定日期时间之后发生的请求。

  • Before:匹配在指定日期之前发生的请求。

  • Between:需要指定两个日期参数,设定一个时间区间,匹配此时间区间内的请求。

  • Cookie:需要指定两个参数,分别为name和regexp(正则表达式),也可以理解Key和Value,匹配具有给定名称且其值与正则表达式匹配的Cookie。

  • Header:需要两个参数header和regexp(正则表达式),也可以理解为Key和Value,匹配请求携带信息。

  • Host:匹配当前请求是否来自于设置的主机。

  • Method:可以设置一个或多个参数,匹配HTTP请求,比如GET、POST

  • Path:匹配指定路径下的请求,可以是多个用逗号分隔

  • Query:需要指定一个或者多个参数,一个必须参数和一个可选的正则表达式,匹配请求中是否包含第一个参数,如果有两个参数,则匹配请求中第一个参数的值是否符合正则表达式。

  • RemoteAddr:匹配指定IP或IP段,符合条件转发。

  • Weight:需要两个参数group和weight(int),实现了路由权重功能,按照路由权重选择同一个分组中的路由

05 SpringCloud Gateway路由过滤器

SpringCloud Gateway过滤器针对HTTP请求报文中的Header、Body、Param等元素进行操作。最新的SpringCloud Gateway版本内置了32种Filter拓展。

过滤器的应用:

  • 对于请求报文(header、path、param、body)进行设值、添加、修改、删除、缓存等操作,根据修改的环节又分为请求与响应

  • 对网关流量计数,实现熔断限流功能

  • 设置请求重定向地址

  • 设置请求状态

  • 保存Session

  • 请求重试

  • 设置请求大小

  • Token传递

SpringCloud Gateway过滤器是最常用的开发方式,支持两种自定义Filter模式:GlobalFilter、GatewayFilter,GlobalFilter是全局过滤器,面向全局生效,GatewayFilter是局部过滤器对于特定的Route生效。

06 SpringCloud Gateway 优化实践

基于SpringCloud Gateway我们有深入的使用,为了让它能够更好地适应企业级的业务场景需求,我们对它的性能和功能上做了很多优化。

路由匹配性能优化


SpringCloud Gateway默认使用逐个路由匹配的方式进行路由的查找,对于每一次请求都会逐个匹配路由的断言规则,直到匹配到第一个路由找到调用的目标服务。所以对于在路由非常多的场景,路由的断言匹配严重影响来访问效率。

针对路由断言匹配我们进行来性能优化,首先通过增加BusyRouteList,采用MRU的算法来维护一个最近常用的繁忙队列,将最常用的路由可以快速匹配出来;其次对于路由列表我们增加来按照路由路径进行分组,往往不同路径代表着不同的微服务,路由是路由中最具有区分力的元素,通过按路径分组,可以进一步大大提升查询路由的效率。

动态路由


动态路由作为网关控制分离的重要实现方式,支持集中管理路由规则,弹性扩展实例。我们将网关拆分为console的控制面,负责维护管理下发控制策略,broker数据面负责作为网关接入业务服务执行路由规则。动态路由通过拓展RouteLocator组件实现CachingRouteLocator,允许每个网关实例到“配置中间件”获取路由定义信息,配置中间件可以是Nacos、Redis、Zookeeper等。

弹性架构



弹性架构:针对网关broker数据面进行组织分化形成共享微服务网关、专有微服务网关、特性微服务网关,实现企业级业务系统的网关集中化管理,实现网关分布式化,避免单点故障,又满足不同业务系统不同路由策略、协议、业务流量情况的需求,同时以特性微服务网关来提供对nginx、kong、envoy的适配。

服务发现

服务发现:服务发现模块拓展SpringCloud Gateway现有的LoadBalancerClientFilter实现,通过便携轻量级的NacosClient、EurekaClient、K8sClient、OpenshiftClient统一多种注册中心的服务发现模式,并支持灵活配置,通过GatewayDiscoveryClient抽象统一返回ServiceList。



多协议转换

多协议转换:协议转换需要将Gateway进入的Http协议进行转换,适配支持dubbo、webservice、grpc协议,将协议转换拆分为三个组件来实现,如对于dubbo协议由Http2Dubbo转换器,DubboInvoker调用器,DubboWriteResponse响应适配器组成。



网关鉴权

网关鉴权:网关在微服务架构中是鉴权的最佳实现方式,具有非侵入易维护的特点。将鉴权可分为Token校验、权限验证、数据权限验证、操作记录几步骤,轻松实现业务系统的安全增强。


标准接口定义

  • 接口调试:网关数据面Broker代理内部微服务,承接来自外部流量的请求;对于接口调试场景,Console服务将用户请求翻译成标准Http格式协议,Broker实时感知请求并调试目标服务,返回调试结果。

  • 流量录制:对于网关经过的请求,在网关通过请求转换接口定义来获得接口定义录制下来,随后可以随时发起流量回放,用来排查问题,或者自动化测试。

  • 流量复制:对于网关经过的请求,在网关如果开启流量复制策略,则首先将流量转换为接口定义,在下发转发到对应的微服务。



07 谐云HC-Gateway API网关

谐云HC-Gateway是基于Java开发的API网关平台,提供高性能、高可用、易扩展的统一API网关解决方案。具有以下特点:

  • API网关全生命周期管理
    支持对接口生命周期过程中的开发、调试、发布、授权、接口文档、日志分析、下线的管理,保证各个阶段的稳定进行。

  • 易扩展性
    提供了丰富的系统组件完成鉴权、限流、监控等能力,能够满足大部分的业务需求;支持自定义插件满足个性化需求、便于调整或替换已有集成功能,不必频繁对网关层代码进行改动,确保网关层的稳定性。

  • 高可管理性
    匹配企业的各种管理特性,包括多租户、多权限、多环境的管理。

  • 丰富的可观测性
    提供网关、应用、路由、服务级别的监控能力,支持链路追踪,将监控数据输出到控制台,提供图像化的展示,帮助用户监控与定位问题。

  • 全面的安全防护
    提供API认证、访问控制、流量控制、IP黑白名单等多种安全机制,避免潜在的安全风险。

  • API门户 支持将接口上架到API门户,提供给第三方开发者采购与使用。

谐云HC-Gateway整体架构图

在控制面,HC-Gateway可提供完善的网关管控,完成服务、接口、应用的相关管理以及配置下发工作;在数据面,可多实例扩展,支持多种类型的微服务接入,包括Nacos、Eureka、Kubernetes微服务、自定义服务;负责网关具体策略的执行,如路由策略、灰度策略、流控策略、安全策略等。

发布于 2022-08-19 16:54


低代码 / 无代码的主要概念并不新鲜,它可以追溯到十多年前的无代码编程 (PWCT) 和类似系统。下面小编整理了十几款开源的低代码开发平台,一起来看看吧~

1、Appsmith 构建和自托管内部应用程序

许可证:Apache-2.0 开发语言:Java、JavaScript、TypeScript 官网:https://www.appsmith.com/

Appsmith 是一个用于构建管理面板、内部工具和仪表板的低代码项目。与超过 15 个数据库和任何 API 集成。构建你需要的一切,速度提高 10 倍。允许你拖放组件来构建仪表板、使用 JavaScript 对象编写逻辑并连接到任何 API、数据库或 GraphQL 源。


项目地址:https://www.oschina.net/p/appsmith

2、BudiBase 构建内部工具的开源低代码平台

许可证:GPLv3 开发语言:JavaScript、TypeScript 官网:https://budibase.com/

Budibase 是一个开源的低代码平台,帮助 IT 专业人士在几分钟内在自己的基础架构上构建、自动化和交付内部工具。它专注于为开发人员提供工具,以加快一个平台内的开发、部署和集成过程。


项目地址:https://www.oschina.net/p/budibase

3、Baserow 开源 Airtable 替代品

许可证:MIT 开发语言:Python 官网:https://baserow.io/

Baserow 是一个 Airtable 的开源替代品,是一个开源的在线表格应用,其单元格支持各种各样的数据类型。用户可以使用这个无代码的平台来创建一个数据库,而无需任何开发技能。

Baserow 是一种用于动态创建、管理数据库和构建数据库应用程序的迷人工具。它具有确保高生产力和可用性的功能。

因为 Baserow 是一个模块化系统,它提供了一个完整的 REST-API 无头系统,所以它吸引了移动开发人员的注意,将其用作他们应用程序的后端。


项目地址:https://www.oschina.net/p/baserow

4、CUBA-Platform 企业级应用开发平台

许可证:Apache-2.0 开发语言:Java 官网:https://www.jmix.cn/

CUBA 平台是一个面向企业的开源快速应用开发系统。它带有数十种工具作为 IDE、应用程序构建工作室、CLI 命令行界面和可靠的可扩展基础设施。CUBA 平台有一个丰富的插件系统,其中包含一个 BPM(业务流程管理)附加组件,需要花费一些时间来构建和安装。


项目地址:https://www.oschina.net/p/cuba-platform

5、Digdag 多云工作流引擎

许可证:Apache-2.0 开发语言:Java、JavaScript、Python 官网:https://www.digdag.io/

Digdag 是一个简单的工具,帮助你建立、运行、安排和监控复杂的任务管道。它可以处理依赖性问题,使任务串联或并行运行。

Digdag 取代了 cron,促进了 IT 运营自动化,协调了数据工程任务,协调了机器学习管道,等等。

Digdag 旨在实现易于部署、多云设置和模块化的结构来构建和扩展业务应用。拥有一系列企业功能,包括丰富的管理面板、多语言支持、错误处理、配置工具和版本控制工具。该解决方案采用 Java 和 Node.js 开发,支持 AWS、私有云、IBM 云和 Digital Ocean。

项目地址:https://www.oschina.net/p/digdag

6、Jeecg-Boot 基于代码生成器的 J2EE 开发平台

许可证:Apache-2.0 开发语言:Java、JavaScript 官网:http://www.jeecg.com/

JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发。

JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生成器-> 手工MERGE, 帮助Java项目解决70%的重复工作,让开发更多关注业务,既能快速提高效率,节省研发成本,同时又不失灵活性。一系列低代码能力:Online表单、Online报表、Online图表、表单设计、流程设计、报表设计、大屏设计 等等...

项目地址:https://www.oschina.net/p/jeecg-boot

7、JEPaaS 低代码快速开发平台

许可证:AGPL 开发语言:Java 官网:https://www.jepaas.com/

JEPaaS 是一款国内实用型低代码快速开发平台,11 年技术沉淀,百余人开发团队不断维护升级,是国内中大型企业信息化御用平台。

可视化的开发环境,低代码拖拽式配置开发,操作极其简单,可以大幅度帮助企业缩减人力和时间成本。支持工作流、IM 即时通讯、bi 图表报表、APP 开发、对接微信、钉钉…… 是国内老牌靠谱开发平台。


项目地址:https://www.oschina.net/p/jepaas

8、Metabase 公司团队数据分析工具

许可证:AGPL 开发语言:Clojure、JavaScript、TypeScript 官网:https://www.metabase.com/

Metabase 是一个简单、开源的方式,通过给公司成员提问,从得到的数据中进行分析、学习。Metabase 是一个无代码和低代码的开源 (Libre) 项目,它消除了从数据库中获取有洞察力的数据的所有麻烦。它不需要处理 SQL 代码甚至不需要知道任何 SQL 就可以完成很多工作。

Metabase 是一个开源的面向数据的可定制仪表板,支持广泛的数据库后端,如 MongoDB、MySQL、PostgreSQL、SQL Server、Oracle 等。它提供了一个用于管理数据库记录、操作数据、操作记录的可视化方法、支持连接、多重聚合、高级过滤和全文搜索的层。它是在几分钟内为企业创建具有高生产力和可用性的高效数据库就绪仪表板的终极解决方案。


项目地址:https://www.oschina.net/p/metabase

9、OpenXava Java 快速 Web 开发套件

许可证:LGPL 开发语言:Java 官网:https://www.openxava.org/

OpenXava 是一个低代码应用程序构建平台,主要关注生产力、简单性和可用性。作为一个使用 Java 技术构建的跨平台系统,它运行在 Linux 和 Windows 服务器上。它可能看起来像一个遗留系统(stated 2005),但它仍然是许多企业的首选。

OpenXava 确保了高生产力、较短的功能学习曲线、大量的企业功能以及完整的移动和平板电脑响应式布局。OpenXava 是一个免费的开源社区版,但企业可以购买不同的额外功能版本。


项目地址:https://www.oschina.net/p/openxava

10、Saltcorn 无代码数据库管理器 Web 应用程序

许可证:MIT 开发语言:Python、JavaScript 官网:https://saltcorn.com/

Saltcorn 是一个无代码数据库管理器 Web 应用程序。它是一个完整的端到端解决方案,适用于你的应用程序的前端、后端和数据库,它以直观的点选、拖放用户界面管理你的应用程序生命周期的构建和托管阶段。

它配备了一个引人注目的仪表板、丰富的生态系统和视图构建器以及可主题化的界面。几乎没有编码经验的用户可以在几分钟内构建一个丰富的交互式数据库应用程序。公司也可以使用它来创建日常使用的工具并即时重新塑造它们。

Saltcorn 有一个令人印象深刻的示例应用程序列表,其中包括:博客、地址簿、项目管理系统、问题跟踪器、wiki、团队管理等。


项目地址:https://www.oschina.net/p/saltcorn

11、Skyve 业务软件构建平台

许可证:LGPL 开发语言:Java、JavaScript、TypeScript 官网:https://skyve.org/

Skyve 是一个开源的业务软件构建平台。它支持无代码和低代码的快速应用开发。支持不同的数据库引擎:MySQL、SQL 服务器和 H2 数据库引擎。其开发人员目前正在努力支持 PostgreSQL 和 Oracle。Skyve 提供了丰富的 API 集,以及低代码开发应用构建向导。

项目地址:https://www.oschina.net/p/skyve

12、ToolJet 低代码框架

许可证:GPL-3.0 开发语言:JavaScript、TypeScript 官网:https://www.tooljet.com/

ToolJet 是一个开源的低代码框架,无需工程团队付出太多努力即可快速构建和部署内部工具。你可以连接到你的数据源,例如数据库(如 PostgreSQL、MongoDB、Elasticsearch 等)、API 端点(ToolJet 支持导入 OpenAPI 规范和 OAuth2 授权)和外部服务(如 Stripe、Slack、Google Sheets、Airtable)并使用预先构建的 UI 小部件来构建内部工具。


项目地址:https://www.oschina.net/p/tooljet

本文所述软件已收录至 Awesome 软件集锦:https://www.oschina.net/project/awesome?columnId=40


推荐的是几个优质的DevOps开源工具

Jpom

Jpom是一个简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。当项目出现问题时,可以能够通过Jpom即时排查问题,问题解决后还可以直接上传修改后的Jar,项目的堆栈信息,服务器CPU、内存使用情况一目了然,不必再登录服务器管理。

项目地址:github.com/dromara/Jpom

choerodon

猪齿鱼Choerodon全场景效能平台,提供体系化方法论和协作、测试、DevOps及容器工具,帮助企业拉通需求、设计、开发、部署、测试和运营流程,一站式提高管理效率和质量。从团队协同到DevOps工具链、从平台工具到体系化方法论,猪齿鱼全面满足协同管理与工程效率需求,贯穿端到端全流程,助力团队效能更快更强更稳定。

项目地址:github.com/open-hand/ch

spug

面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。

项目地址:gitee.com/openspug/spug

walle-web

walle 让用户代码发布终于可以不只能选择 jenkins!支持各种web代码发布,php、java、python、go等代码的发布、回滚可以通过web来一键完成。walle 一个可自由配置项目,更人性化,高颜值,支持git、多用户、多语言、多项目、多环境同时部署的开源上线部署系统。

项目地址:github.com/meolu/walle-

zadig

Zadig 是一款面向开发者设计的云原生持续交付(Continuous Delivery)产品,具备高可用 CI/CD 能力,提供云原生运行环境,支持开发者本地联调、微服务并行构建和部署、集成测试等。

项目地址:gitee.com/koderover/zad

Gokins

Gokins一款由Go语言和Vue编写的款轻量级、能够持续集成和持续交付的工具。作为一个可扩展的自动化服务器,Gokins 可以用作简单的 CI 服务器,或者变成任何项目的持续交付中心。

项目地址:gitee.com/gokins/gokins

ks-devops

KubeSphere 愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。

项目地址:gitee.com/kubesphere/ks


发布于 2022-03-27 11:50


weiit-saas是一款Java开源项目,由weiit团队自研,意在通过技术封装,帮助企业一键生成小程序、公众号,让企业拥有独立品牌的自营商城

weiit-saas是完全开源电商SaaS系统,属于weiit开源的社区版,旧版已不在维护和更新,仅供学习和参考,新版saas从底层架构到前后端UI设计已经全面优化和升级,访问地址:https://www.wei-it.com/

一、引言

  • 目前系统能解决的主要问题

  • 2016年3月weiit团队推出SAAS电商1.0版本,帮助20家企业完成独立品牌商城上线,成功接入微信;

  • 2017年6月 weiit团队启动2.0版本开发,主打小程序一键生成,并获得部分企业付费支持;

  • 2018年5月 weiit团队研发成功并上线SAAS电商2.0版本,快速获得200多家企业使用与支持;

  • 2018年到2019年 weiit团队研发经费无法持续,放弃SAAS系统持续迭代,转型做技术服务商;

  • 2020年 weiit团队宣布,SAAS电商产品免费开源,让圈内的技术大佬一起学习与交流;

  • 2021年 weiit团队重构构建企业级商用Saas新零售系统,并推出全新的SpringCloud微服务架构(技术栈:SpringCloud + Oauth2.0 + ShiroRedis + JWT + Gateway + Nacos + Nginx + ant-design-vue;数据隔离:不同租户采用Schema隔离)的商业2.0版本,全新数字化零售SaaS系统包括《数字商城SaaS系统》与《数字门店SaaS系统》分别解决线上零售(电商)、线下零售(新消费/门店)整体解决方案,目前已正式发布上线,访问地址https://www.wei-it.com/ 。欢迎有需要的朋友们一起交流探讨。

二、主要特点

  • 项目采用Spring+SpringMVC+Mybatis主流开源框架,遵循MVC架构,设计轻巧,使用简单,开发人员接手与二次开发简单易懂;

  • 核心框架weiit-frame也都已经完全开源,下载地址见下方Maven仓库地址;

  • 项目完成了对阿里云、腾讯云、微信生态的快速接入与代码示例,并成功运用到了商业中,方便大家学习对OSS/COS/短信服务/快递服务/公众号/小程序/微信开放平台/微信支付的技术点与应用场景的学习;

  • 小程序与公众号第三方授权集成,让开发者与企业省去繁琐的配置,对AppId/AppSecret集成彻底告别;

  • 微信支付第三方授权集成,让开发者与企业省去繁琐的配置,让企业服务成本大大降低;

  • 小程序代码自动push与升级,公众号基本常规功能(自定义菜单、图文、素材,群发)全部接管,让企业无需登录微信官方入口,统一化管理企业信息与数据;

  • 微信消息通知与模板自动同步与管理,让企业场景融合无障碍;

  • 自定义装修功能,实现企业电商场景多元化,解决不同行业不同模板,让企业需求得到真正解决;

  • 丰富的营销工具,解决企业微营销需求,并集中化管理。拼团活动、积分活动、砍价,优惠券,卡券,礼品卡,邀请有礼等营销活动,方便二次开发;

  • 不同企业数据隔离,真正实现SAAS数据隔离模型,让企业数据互不干扰。

  • 不同企业不同域名自动分配,让企业小程序、公众号前端隔离,避免因为公众号或者小程序推广时导致域名被检测导致的封号问题出现,即不同企业不同域,意在防止saas平台中的企业受到其他企业的影响。

三、Maven仓库

四、系统演示

一、演示环境地址

  • 原演示地址( http://www.wstore.me )已停止升级与更新(开发者可放心,此项目是完全开源,开发者深度学习可自行搭建起来)。

  • 项目介绍中有详细的产品介绍、完整的源码、数据库脚本文件及项目部署文档( https://blog.csdn.net/weiitsaas/article/details/123443406 ),如果对该开源项目感兴趣可以尝试自行搭建,有一定开发基础的技术是完全可以搭建起来的,也已经有一部分开发者搭建运行起来了,运行起来的效果如下文所贴出来的系统功能截屏效果是一致。

二、成功案例:

   

五、系统功能

avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar

avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar avatar

六、系统核心

avatar 详情:系统核心

七、技术支持

weiit开源支持


作者 | 飘渺Jam 责编 | 欧阳姝黎


什么是微服务


提到微服务不得不提Martin Fowler在2014年3月25日发表的文章 Microservices,里面给出了微服务的定义。后续国内所有关于微服务的介绍都是基于这篇文章的翻译,或加上自己的理解而成。其中最重要的一段如下:

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

翻译过来就是:微服务这种架构风格就是把一组小服务演化成为一个单一的应用的一种方法。每个应用都运行在自己的进程中,并通过轻量级的机制保持通信,就像HTTP这样的API。这些服务要基于业务场景,并使用自动化布署工具进行独立的发布。可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。


如何实现微服务


相对于单体式架构的简单粗暴,微服务架构将应用打散,形成多个微服务进行独立开发、测试、部署与运维。虽然从管理与逻辑上更符合业务需要,但微服务架构也带来了诸多急需解决的核心问题:

  1. 如何发现新服务节点以及检查服务节点的状态?

  2. 如何发现服务及负载均衡如何实现?

  3. 服务间如何进行消息通信?

  4. 如何对使用者暴露服务 API?

  5. 如何集中管理众多服务节点的配置文件?

  6. 如何收集服务节点的日志并统一管理?

  7. 如何实现服务间调用链路追踪?

  8. 如何对系统进行链路保护,避免微服务雪崩?

可以发现,上述这些问题并不是针对某种语言或某种技术的,任何软件厂商要构建微服务架构就必须面对这些问题,要么独立开发要么将已有多种技术整合形成整体解决方案。好在经过多年沉淀,业内已经有了标准答案,下图清晰的说明微服务架构需要的标准组件。

API网关: 封装了系统内部架构,为每个客户端提供一个定制的 API。在微服务架构中,服务网关的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。

注册中心: 微服务架构体系中最核心的技术组件,它起到新服务节点的注册与状态维护的作用。诸如 Dubbo、Spring Cloud 等主流的微服务框架都基于 Zookeeper、Eureka 等分布式系统协调工具构建了服务注册中心。

服务路由: 通过注册中心构建了一个多服务的集群化环境中,当客户端请求到达集群,如何确定由哪一台服务器进行请求响应呢?这就是服务路由问题。

服务通信: 在微服务定义中阐述服务间通信采用轻量级协议,通常是 HTTP RESTful 风格。但因 RESTful 风格过于灵活,必须加以约束,通常在应用时对其进行上层封装,例如在 Spring Cloud 中就提供了 Feign 和 RestTemplate 两种技术屏蔽底层实现 RESTful 通信细节。

服务保护: 对于分布式环境中的服务而言,服务在自身失败引发生错误的同时,还会因为依赖其他服务而导致失败。除了比较容易想到和实现的超时、重试和异步解耦等手段之外,我们需要考虑针对各种场景的容错机制。

链路跟踪:一个复杂的业务流程可能需要连续调用多个微服务,我们需要记录一个完整业务逻辑涉及的每一个微服务的运行状态,再通过可视化链路图展现,帮助软件工程师在系统出错时分析解决问题,常见的解决方案有Zipkin,SkyWalking。

统一日志管理: 微服务架构默认将应用日志分散保存在每一个微服务节点上,当系统进行用户行为分析、数据统计时必须收集所有节点日志数据,非常不方便。这时候我们需要一个独立的日志平台,收集所有节点的日志数据并可方便对其进行汇总分析,常见的解决方案有ELK,EFK。

配置中心: 在微服务架构中,考虑到服务数量和配置信息的分散性,一般都需要引入配置中心的设计思想和相关工具。通过部署配置中心服务器,将原本分散的配置文件从应用中剥离,集中转存到配置中心。一般配置中心会提供 UI 界面,可以方便快捷的实现大规模集群的配置调整。


为什么选择SpringCloud


首先,Spring Cloud 具备一个天生的优势,因为它是 Spring 家庭的一员,而 Spring 在 Java EE 开发领域的强大地位,给 Spring Cloud 起到很好的推动作用。同时,Spring Cloud 所基于的 Spring Boot,已经成为 Java EE 领域中最流行的开发框架,用来简化 Spring 应用程序的框架搭建和开发过程。

其次,技术组件的完备性是我们选择 Spring Cloud 的主要原因。Spring Cloud 中包含了开发一个完整的微服务系统所需的几乎所有技术组件,包括服务注册和发现、API 网关、配置中心、消息处理、负载均衡、熔断器、数据监控等常见技术组件都可以基于 Spring Boot 快速集成到业务系统中。

以下为SpringCloud 中常用的技术组件


为什么选择SpringCloud alibaba


首先, SpringCloud中的技术组件是集众家之长,如注册中心 Eureka,Zuul等都是依赖于Netflix的,这也导致它受制于第三方厂商。如Zuul宣布停止维护,Spring机构便不得不寻找替代品或自研;Eureka2.x 闭源不允许使用;

其次,Springcloud作为国外产品引入到国内后出现了水土不服,如SpringCloud Config默认将文件存在Github上,且没有维护界面,国内软件公司很少会同意这么做。比如我们部门就是使用了Apollo配置中心替代了原生的SpringCloud Config。

Spring Cloud Alibaba是国产的微服务开发一站式解决方案,与原有 Spring Cloud 兼容的同时对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国情的微服务架构,当前Spring Cloud Alibaba已经是直接隶属于 Spring Cloud 的子项目。官网是:https://spring.io/projects/spring-cloud-alibaba#overview

Spring Cloud Alibaba 对服务注册、配置中心与负载均衡功能都整合进 Nacos,有图形化界面,简化了微服务架构的复杂度,出问题的概率也会降低。原有的服务保护组件也调整为 Sentinel,相较Hystrix功能更强大,使用也更加友好。同时还支持了对Dubbo的调用,而且还有Seata用于支持分布式事务。