永辉彩食鲜架构概述

大兔子大兔子 提交于 2019-12-24 10:16:49

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

背景

满足整个永辉彩食鲜大B业务从线上到供应链的全线业务系统的研发和维护,保证整个系统的稳定性和性能。

架构思考

大B业务不同于小B业务,它没有常见的业务高并发的场景,所以更多是对业务数据的一致性(业务数据基本都跟财务相关),系统的稳定性和常规故障自动恢复能力有更高期盼和要求。同时伴随业务的及数据增长,整体系统性能要保证的稳定。

总体架构图

架构演进历程

项目基础设施搭建 -> 运维自动化 ->数据库运维构建 -> 分布式基础设施搭建 -> 分布式监控体系构建 -> 分布式框架自研 -> 业务基础服务构建 -> 技术分享 -> 开源社区构建

(大致的推进重新历程如上,实际场景下不分严格先后顺序。)

项目基础设施的建设

涉及 gitlab, svn,  jenkins , nesus, sonar, 禅道, 知识库;剥离出永辉自身的研发基础设施,减少频繁的沟通成本,获取系统的管理员权限便于打通研发和运维自动化。

运维自动化

1. 钉钉自动化报警/通知

涉及jenkins,gitlab,禅道,sonar,知识库等自动化集成。

2. jenkins 一键发布

涉及jenkins的一键滚动发布,自动回滚,异常自动重启,便于运维快速发布,避免手工发布的出错。

3. docker 容器集群化

从docker单机版到docker集群版本,逐步验证,逐步推进到线上环境部署,提升现有服务器的资源的利用率,优化服务的稳定性(自动恢复机制),更加精简运维的维护。(如果高并发场景的业务,考虑实现自动化的弹性扩容服务)

数据库运维构建

1. 存储: 数据库采用mysql存储,innodb存储引擎。

2. 读写分离: 采用主从mysql 进行读写分离。

3. 冷备热备: 采用主从mysql 进行热备。

每天进行一次冷备到其他服务器。

磁盘每天进行一次快照存储。

4. 异地备份: 暂无。

5. 故障切换: 因数据一致性要求较严,一般dba手工进行故障恢复。

分布式基础设施搭建

采用开源的基础服务设施, 构建整个分布式技术体系, 从而加快完成分布式基础设施的整体布局,做好主备和故障愈合的预案,从而确保整体基础设施的稳定性。(ps: 假如是大型的,偏向高并发,长远的电商业务,可以综合考虑自研基础服务设施为优先方案)

1. 分布式任务调度平台

技术选型: xxl-job, 用于后台/异步任务等任务的挂载,确保一些耗时/耗资源/定时的任务和api分离,确保前端api的稳定。

2. 分布式服务中心

技术选型: eureka-server, 用于服务的注册,负载均衡,故障转移,健康检测等服务统一管理。

3. 分布式消息队列

技术选型: rocketmq, 用于业务的异步解耦,上下游消息的转发,异构业务的异步通信等。

4. 分布式日志中心

技术选型: elk, 用于应用日志的统一管理,查询,统计等。

5. 分布式文件服务

技术选型: 七牛文件服务, 用于文件的上传,下载,文件生命周期的管理,图片的动态缩放等。

6. CDN

技术选型: 腾讯cdn, 用于图片,脚本,css等文件的cdn网络加速,加快前端资源的下载速度。

7. 分布式配置中心

技术选型: apollo, 用于所有项目的配置分类,抽象,灰度发布等管理。

8. 分库分表中间件

技术选型: sharding-jdbc, 用于对业务开发人员屏蔽数据库的分库分表,主从读写分离的拆分细节。

9. 搜索服务

技术选型: elasticsearch, 用于全文检索,相似度文档(数据)的业务查询。

10. 分布式缓存

技术选型: redis, 用于业务的分布式缓存,从而加快业务的查询速度。

分布式监控体系搭建

1. 调用链监控

技术选型: pinpoint, 用于所有服务的调用关系的监控分析,里面也包含(cpu,内存,耗时)性能等。未来要迁移成skywalking。

2. 日志监控

技术选型: elk, 用于应用日志的统一管理,查询,统计等。

3. 服务器监控

技术选型: zabbix, 用于所有linux服务器系统级别的性能监控。

4. DB监控

技术选型: pmm,用于所有线上mysql数据库的性能监控记录,慢查询等分析。

5. 应用监控(性能分析)

技术选型: cat,用于所有线上顺向和逆向调用链路的分析,数据库和url耗时的性能分析,服务及服务器的性能分析报表,bsf自研监控报表等。

分布式框架自研

基于开源的分布式基础设施和分布式的监控体系,通过自研的bsf框架进行粘合;把复杂的配置和复杂的各个分布式组件之间的协作,通过单一bsf框架进行整合,通过简单的接口对开发者提供标准规范的调用方式;采用类似springcloud的思想,以插件形式对所有的基础服务进行平行扩展,方便开发人员阅读和维护;未来基础服务可以随时升级替换,只需要保持对开发者的接口兼容即可。

愿景: 让开发人员仅关注快速使用,无需了解底层服务实现,让开发变得更简单。

目前已集成插件有:

cat(分布式监控平台),

apollo(分布式配置中心),

elk(分布式日志中心),

eureka(注册中心),

job(分布式任务调度),

message(消息),

mq(消息队列),

shardingjdbc(分库分表),

redis(分布式缓存),

elasticsearch(搜索引擎),

health(bsf健康检查),

file(文件服务)

等。

同时底层框架bsf和业务框架business剥离,让通用的底层框架剥离实际的公共业务类库。

基于bsf和business之上,定义标准的项目脚手架csx-b2b-demo,用于快速构建项目服务。

业务基础服务构建

主数据 提供公用的业务基础配置数据。

用户中心 提供统一用户登陆鉴权。

流程服务 提供流程的设计,表单设计和流程审批功能。

短信服务 提供永辉等第三方短信平台对接等。

报表 提供线上统一报表查询和导入导出等。

技术分享

架构组提供进行11场左右的技术分享,同时业务部门也会举办一些业务培训,让开发人员了解并熟悉底层框架技术原理,日常使用,以及现有产品业务等。

开源社区构建

构建开源技术博客,开源bsf底层技术框架,推进核心技术人员参与技术分享社区和沙龙, 邀请第三方技术人员做一些培训分享。

关于混合云

永辉云 用于内部所有测试开发环境的构建和部分线上服务。

腾讯云/七牛云 用于文件服务,第三方cdn,dns等公共服务。

自建机房 用于搭建所有线上服务,数据库,容器集群,大部分基础服务设施等等。

其他

暂未涉及前端,大数据,机器学习(人工智能),测试平台相关。

by 车江毅

2019-12-20

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!