2产品架构 图2.1云客服系统产品整体架构图 2.1基础设施 云客服系统底层采用多活系统。高效的分布式服务框架、采用多种中间件(消息中间件、数据访问
2 产品架构
图2.1云客服系统产品整体架构图
2.1 基础设施
云客服系统底层采用多活系统。高效的分布式服务框架、采用多种中间件(消息中间件、数据访问中间件、Dubbo配置中心)、分布式缓存系统、持久化存储(关系数据库、Nosql数据库)、OpenSearch搜索引擎、monitor监控系统、离线计算与实时计算、数据仓库、OSS分布式文件系统、日志收集系统等等。如图2.1所示,是云客服系统完整的技术架构图。
2.2 面向服务体系的架构SOA
当系统发展到一定的程度,发现会从一个系统发展到多个系统。当多个系统都存在重复的组件,子系统之间有许多相对重复的业务,在这种情况下,系统之间相互通信,数据相互交互。此时,开发人员不愿再去重复地造轮子。本文想把整个大的系统拆分出来,根据高类聚低耦合的原则,为了让项目的各个系统之间,单个组件具有单独提供服务的能力。将一个项目会拆分成每一个能够单独提供服务的组件。对于相对核心的业务进行单独部署,上层业务直接调用底层核心业务。本文深入探讨面向服务体系,通过进一步分析业务,把一些服务化的业务进一步提取,使得服务最细粒度,服务之间是不能双向依赖,使得依赖难度较大,那么系统架构在服务治理的难度也就非常大。在这个基础上,SOA会轻松地帮助开发人员去完成项目治理,其中包括服务的提供、消费,连接,通信、数据的序列化、发现、路由等一系列的服务问题。
2.3 RPC远程调用
RPC是一种通信方式,它使得不同服务器、不同网络之间的代码能够相互调用。它包括提供者、消费者以及客户端和服务端之间连接。在云客服系统架构中,采用集群式注册中心,Dubbo为第三方中间服务件。在项目部署时,Spring会去扫描所有设定scan包下面的注解,比如Dubbo的注解:@Service,@Reference等,然后把Dubbo服务会自动将序列化信息注册到Zk中。注册信息如下:
/dubbo/com.so.skill.service.UserRecordHandler/providerdubbo%3A%2F%2F172.18.11.244%3A20881%2Fcom.so.skill.service.UserRecordHandler%3Fanyhost%3Dfalse%26application%3Duser-provider%26default.timeout%3D30000%26dubbo%3D2.6.0%26generic%3Dtrue%26interface%3Dcom.so.skill.service.UserRecordService%26methods%3DqueryTotalCount%2CaddRecord%2CclickNumberOnTime%2CqueryRecordList%26owner%3Dmatteo%26pid%3D9793%26side%3Dprovider%26timestamp%3D1525606930880。
这是一个标准的zookeeper服务中心的组册信息。如图2.2所示,它记录了Java的Interface:com.so.skill.service.UserRecordService、默认超时时间、服务者、pid、泛化通用信息等等信息。Dubbo架构构造一个基本的API:BaseService。在服务器A上去实现这个接口,ServiceProvider,在服务器B上去调用BaseService中的SayHelloService的方法,Dubbo需要使用服务发现去寻找调用的服务器。根据最近最优的算法寻找提供者信息,然后通过HTTP或则TCP方式去请求提供者。提供者将执行的结果返回给消费者。
图2.2RPC实现原理UML图
2.4 分布式缓存
在计算机系统架构中,缓存是一个最常见的解决系统性能问题的方式。大部分资源会在同一时间段多次请求。我们根据就近原则,让系统资源存储在离计算最近的地方,能够大大地提高系统的性能。在高并发的环境下面,数据库会大量的进行读写操作,磁盘的读写速度相对于内存是一个最大的瓶颈。内存的处理速度比磁盘处理高了不止一个量级。我们为了减轻数据库的负担,提高系统的响应速度,可以从两个方便去思考这个问题。第一,我们在数据库数据落库前加一个一级缓存。但是单机内存资源始终是有限的,服务器对百万级的数据处理内存也会存在很大的瓶颈。并且,如果大量使用本地缓存,在分布式系统中,会造成内存资源极度浪费。一个资源在不同的内存中存储了多份。这样的模式显然非常不合理,因此我们采取将资源集中,构建分布式缓存的方法。我们使用了Memcache作为分布式缓存系统。Memcache是一款高性能的分布式内存对象缓存系统。我们在统一数据访问模块上接一层分布式缓存。每次查询数据数据库时,我们现在缓存中查询所需资源。在应用中,尽可能的减少去数据库中做查询操作,更大的提高应用数据查询的速度。