微服务实战:百万千万级数据的实时处理架构(一)

时间:2024-05-23 20:44:20

         单纯从技术的角度架构项目,抛开网络、硬件,性能、以及数据安全应该是我们最为关注的问题。首先从性能的角度讨论建设日百万甚至千万级的数据处理服务平台。其中各个微服务均采用Java语言开发。

  1. 主要使用的技术:微服务采用Spring Boot架构,消息传递处理采用RabbitMQ,缓存机制采用了Redis,数据持久化用的是MySQL,Nginx负载,以及需要访问SQLServer数据库,搜索引擎Solr,数据展示层Rest API+Mybatis+AngularJS。

  2. 定义微服务边界问题。边界问题应该是微服务难点之一,因为边界问题直接影响模块划分颗粒度的划分,定义不同域模型,最终会影响到整个项目的水平、甚至垂直扩展性问题,如果不合理服务重构的可能性会大幅增加。结合业务特性,项目主要划分接收器服务,派发服务,处理器服务,API服务,客户端服务以及最终展示页面服务。

  3. 分布式,数据库MySQL读写分离、RabbitMQ集群、Solr集群、以及多节点负载。

        Spring boot可以很好的帮助开发人员整合常用的中间件,借助Spring profile加载生成不同配置,对应不同服务的配置参数,服务需要配置不同数据库甚至MQ,目前服务没有引用Spring Cloud做中心配置管理服务,单个务启动需要独立加载服务配置。通常情况RabbitMQ生产者放入队列的速率优于后者,为了提高数据实时处理性能,避免堵塞,数据延迟,采取的措施是设置多个连接,每个链接设置多个线程同时消费,确保ACK处于有效开启状态。考虑到数据量较大,表进行了分区处理。接收器服务用于对外接受消息数据,主要拆分了接受数据模板,分发模块将接受的数据再次扭转给MQ。每个服务对应MQ设置有独立virtualhost,通过RabbitMQ将服务分离,异步处理数据。当派发服务监听到数据将数据派发给处理器服务,经过MQ扭转,处理器最终高效的讲数据最终消化,分别计算出需要给客户端处理的数据放入客户端MQ,实时并发调用第三方接口。通过MQ从数据流层面将各个服务独立拆分,服务之间互不影响,独立做各自特定的业务处理,确保数据实时处理的低延迟。

         欢迎关注本人公众号,随时交流探讨。微服务实战:百万千万级数据的实时处理架构(一)