青岛护适通医疗科技有限公司 山东 青岛 266101
CRM系统在国内推广实施已经二十余年了。为了规范管理、降低成本、提高竞争力,各家企业均纷纷上马该系统。随着技术的不断进步,CRM系统自身也在发生者深刻的变革。现就家电领域CRM系统的技术实现做一下浅显的探讨。
总体架构方案基于微服务的理念,前后端实现分离方案,结合Spring-Cloud实现分布式微服务,将每个微服务设计成无状态服务,可以借助于Kubernetes等具备弹性伸缩能力的基础平台,实现按需弹性伸缩,更好的应对不同模块的不用访问量带来的压力,同时降低运维等成本。
↑整体架构方案
View为整个系统的“窗户”,属于用户的视图层,用户视觉效果的展示。View层采用Vue进行开发,使用蚂蚁金服开源的AntDesign模板风格实现Web端的设计,采用微信前端团队开源的WeUI库结合DCloud的uni-app实现移动端的开发,uni-app可以实现一套代码生成IOS、Android、微信小程序、支付宝小程序等多平台多形态的移动端程序。
Gateway为整个系统的鉴权、授权和路由模块,每一次的前端的访问请求,都要经过Gateway的审核,首先验证用户是否已经登录,其次验证用户是否有权限访问当前的URI,然后再决定是否放行。
Gateway的方案采用SpringCloud生态体系中的Kong,Kong是一个云原生,快速,可扩展和分布式微服务抽象层(也称为API网关,API中间件或某些情况下的Service Mesh)。作为2015年的开源项目,其核心价值在于高性能和可扩展性。Kong积极维护,广泛应用于从创业公司到Global 5000以及政府组织等公司的生产,其特性如下:
Cloud-Native:平台不可知,Kong可以从裸机运行到Kubernetes。
动态负载平衡:跨多个上游服务负载均衡流量。
基于散列的负载平衡:使用一致的散列/粘性会话进行负载平衡。
断路器:智能跟踪不健康的上游服务。
运行状况检查:上游服务的主动和被动监控。
服务发现:在Consul等第三方DNS解析器中解析SRV记录。
无服务器:直接从Kong调用并保护AWS Lambda或OpenWhisk功能。
WebSockets:通过WebSockets与您的上游服务进行通信。
OAuth2.0:轻松将OAuth2.0身份验证添加到API。
日志记录:通过HTTP,TCP,UDP或磁盘记录对系统的请求和响应。
安全性:ACL,Bot检测,白名单/黑名单IP等……
Syslog:登录系统日志。
SSL:为基础服务或API设置特定SSL证书。
监控:实时监控提供关键负载和性能服务器指标。
转发代理:使Kong连接到中间透明HTTP代理。
身份验证:HMAC,JWT,Basic等。
速率限制:基于许多变量阻止和限制请求。
转换:添加,删除或操作HTTP请求和响应。
缓存:在代理层缓存并提供响应。
CLI:从命令行控制您的Kong集群。
REST API:Kong可以使用其RESTful API进行操作,以获得最大的灵活性。
地理复制:配置始终是不同地区的最新信息。
故障检测和恢复:如果您的某个Cassandra节点发生故障,Kong不会受到影响。
群集:所有Kong节点自动加入群集,使其配置在节点之间更新。
可扩展性:通过自然分布,Kong通过简单地添加节点来水平扩展。
性能:Kong通过扩展和核心使用NGINX轻松处理负载。
插件:可扩展的体系结构,用于为Kong和API添加功能。
业务模块共分为六个,每个模块均为无状态服务,以便在单模块高压访问的时候实现弹性伸缩和负载均衡。
业务模块的开发框架为SpringBoot,SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外Spring-Boot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化 Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
缓存使用Redis Cluster,Redis单机负载能力官方数据能达到180k的QPS,在面对高并发的情况下有很好的支撑能力,并且集群模式下,其自带的高可用能力为大流量大并发场景提供了更好的支持。
DB层采用MySQL 8,采用一主两从的架构。Master负责主数据的读取和写入,Slave 1实时从Master中复制数据,做主从同步和读写分离(如果有需要的话),Slave 2作为延迟热备份,延迟一小时从Master拉取数据。
Redis集群中的数据为缓存数据,当Redis Node宕机后,Redis集群能够主动发生主从切换,实现整个集群的高可用。
MySQL使用KeepAlive进行监控,当发生主节点宕机的情况,自动触发主从切换机制,将Slave 1切换成主机,保证整个集群的可用性。另外,制定相关的数据灾备策略,每周一凌晨0点做Slave 1的全量备份,每周四、六凌晨0点做Slave 1的数据增量备份。以上仅为个人的一点浅见,希望能对企业有所帮助。