赞
踩
公司已有信息系统技术栈为 ExtJS4 + Spring3 + Struts2 + Mybatis + Oralce;
为了迎接接下来,公司商业模式升级带来的大量且紧急的业务需求,开始着手将信息系统升级为 Spring Boot + Spring Cloud + AngularJS,并引入 Kafka 、Redis 等组件解耦并提高系统性能,同时在交付阶段引入 Docker 和容器调度平台 Docker Swarm,大大提高了需求交付速度。
典型业务基于微信的营销管理系统;秒杀抢购系统;
引入开源CRM系统;
此阶段边实现业务需求边调整架构;团队两个人,UI和我;此阶段历时半年告一段落。
用户中心: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 重新设计优化业务系统架构,将容器调度平台陆续由 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日志。
在基于 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 提供的强大通用的服务网格管理能力,大大简化了业务应用系统的内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。