当前位置:   article > 正文

一个项目的架构演进说明单体应用、微服务和服务网格_服务网格和微服务

服务网格和微服务

单体业务系统

微服务改造

公司已有信息系统技术栈为 ExtJS4 + Spring3 + Struts2 + Mybatis + Oralce;
为了迎接接下来,公司商业模式升级带来的大量且紧急的业务需求,开始着手将信息系统升级为 Spring Boot + Spring Cloud + AngularJS,并引入 Kafka 、Redis 等组件解耦并提高系统性能,同时在交付阶段引入 Docker 和容器调度平台 Docker Swarm,大大提高了需求交付速度。
典型业务基于微信的营销管理系统;秒杀抢购系统;
引入开源CRM系统;
此阶段边实现业务需求边调整架构;团队两个人,UI和我;此阶段历时半年告一段落。

微服务改造2

用户中心:Spring Cloud Security OAuth / CloudFoundry User Account and Authentication Service;正宗的第三方登录接入;
XXL-JOB 代替 Quartz 内嵌用法,大大解耦应用复杂度;
基于领域驱动设计 DDD 和 事件驱动架构(EDA)重构系统数据流动,又进一步的简化了业务架构;事件驱动架构消息系统使用 Kafka 实现。
CRM、ERP等核心业务系统使用 Spring Boot + Spring Data JPA + Mybatis + Mybatis Plus + ShardingSphere实现;同时使用了Spring Cloud Netflix + Spring Cloud OpenFeign Ribbon + Hytrix + Spring Cloud Security OAuth + Spring Cloud Sleuth(Zipkin) + Spring Session(Redis 实现)+ Spring Cloud Stream + Zuul等Spring Cloud组件;
Spring Statemachine 实现订单系统;
用户画像:
重点技术场景
接口幂等:使用业务主键是西安接口幂等;

基于 Kubernetes 重构

Kubernetes 开始稳定,阿里云上了 Kubernetes 服务,此阶段开始基于 Kubernetes 重新设计优化业务系统架构,将容器调度平台陆续由 Docker Swarm 替换为 Kubernetes。

结合阿里云的负载均衡服务,架构的灵活性和承载能力大大加强。

为了提高系统的安全性,在 Kubernetes 中部署了 MySQL ,Redis 集群和 Kafka 集群等中间件,只对外暴露网关服务,所有服务之间、服务和数据库、中间件之间的流量全部在 Kubernetes 内部。

在迭代过程中,首先将服务注册发现机制由 Spring Cloud Netflix Eureka 替换为 Kubernetes Service ;接着将应用的配置信息存在形式替换为 Kubernetes ConfigMap;调整应用 Ribbon 和 Feign 通过 Kubernetes Service 互相调用;

将所有的后端服务纳入 Kubernetes 之后,开始着手将 Web 前端项目也容器化,此时前端项目已由 AngularJS 转为 Ant Design React 技术栈。最终基于 Nginx 镜像构建前端项目镜像,极大的提高了前端项目交付速度和稳定性。

监控:前端项目容器收集nginx日志。

基于 Istio 重构公司信息系统

在基于 Kubernetes 重构系统的过程中,去掉了 Spring Cloud Netflix 组件,还剩下 Spring Cloud OpenFeign、Ribbon、Hytrix、Spring Cloud Sleuth 等这些组件,这些组件都是很优秀的组件,只是随着人们对于微服务理解的越来越深刻,这些通用的功能落下来形成了 Service Mesh;此阶段将上述功能使用 Istio 对应的功能替换。

去掉了巨大侵入性的 Ribbon 和 Feign 之后,服务之间的调用转为 Spring RestTemplate ;

Istio 和 Spring Cloud 对服务调用提供了几乎一致的支持,且 Istio 提供了更多的功能。

Istio 提供的Timeouts、Retries、Circuit breakers、Fault injection、Traffic Shifting、locality-load-balancing 等流量管理能力完全覆盖 Spring Cloud 整合 Ribbon 、 Feign、Spring Cloud CircuitBreaker 和 Spring Cloud LoadBalancer 提供的服务之间调用的控制能力。

使用 Istio metrics 代替了大部分非业务指标,从 Istio metrics 和 spring boot actuator 收集的指标存储在 Prometheus 中,使用 Grafana 展示;

Access Log统一使用 Istio Access Logs 能力,之前架构中前端是Nginx,后端是 Spring Boot 内置的 Tomcat,需要解析这两个的 Access Log,使用 Istio 重构之后,只需要处理 Envoy 的 Access Log 即可。

分布式追踪:使用 Istio Distributed Tracing 能力替换 Spring Cloud Sleuth,基于 Istio Distributed Tracing 暴露出来的 Envoy 的 Tracing 的自定义 tag 的能力,展示每个 HTTP 请求的所有参数。由于已将 Web 前端项目容器化,所以从 Web 前端到后端服务到数据库进行了全链路的追踪;移动端和微信小程序等在前端引入 Zipkin B3 协议库,也实现全链路追踪。

此阶段升级完成之后,借助 Istio 提供的强大通用的服务网格管理能力,大大简化了业务应用系统的内容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/800240
推荐阅读
相关标签
  

闽ICP备14008679号