APP下载

微服务框架在云笔记系统中的应用

2022-04-14贾峰

现代计算机 2022年1期
关键词:调用分布式笔记本

贾峰

(广东理工职业学院,广州 510091)

0 引言

云笔记系统通过分布式存储解决了笔记信息量膨胀的问题,业务端同时提供了Windows客户端,并且数据平台支持移动设备的接入,更加贴近学生的使用习惯,达到无处不学习、无处不笔记的效果。文献[1]和[2]中涉及的云笔记系统基于单体架构,这样的系统存在维护性差、可靠性低、并发能力有限等问题;文献[3]虽然在项目中使用分布式的架构,但没有指出如何实现微服务的调用。

传统分布式云笔记系统中前端系统向后端发起http跨域请求访问,当并发量增加情况下作为中转器的nginx负载过高,另外如果对服务器数量进行增减,就要手动更改ngnix的配置文件,这样服务的发现不够灵活。因此需选用相对于小巧、灵活的Dubbo技术作为项目开发架构。

1 微服务架构

1.1 RPC思想

RPC是远程过程调用(Remote Procedure Call)的缩写形式。RPC可以简单理解为自己需要完成一项业务,但是由于诸多原因自己不能直接调用,只能通过第三方访问的业务调用。

1.2 Dubbo框架

Dubbo是阿里SOA服务化治理方案的核心框架,作为分布式RPC框架,它提供阿里注册中心机制,解耦了消费方和服务方动态发现的问题,并提供高可靠能力,大量采用微内核和富插件思想,并提供灵活可扩展能力。

1.3 服务的自动注册和发现

项目中引入Dubbo框架后,在远程调用时能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。Dubbo内部是如何实现的?如图1所示:①当生产者启动时,会将服务信息(包括服务名称、服务IP和端口)配置到注册中心。②注册中心动态维护服务列表,定时进行刷新。③消费访问注册中心,获取最新的服务列表数据,之后缓存到本地以便下次调用。④当用户访问消费者时,消费者查询本地的服务列表进行负载均衡,访问其中一个生产者获取数据。⑤注册中心通过心跳检测机制访问生产者,当生产者宕机时马上更新服务列表并全网广播,通知所有的消费者更新列表数据。

图1 服务的注册和发现

2 云笔记系统设计与实现

2.1 系统架构搭建

云笔记系统整体设计分为3层架构,设计思想为:最底层是数据访问层,为服务支撑的基础保障;中间层是业务层,里面对业务模块进行细化和拆分,将系统用户所需的功能抽取成多个微服务,微服务向下调用各服务提供API,向上对用户访问层提供微服务接口;用户访问层包括PC、手机等各种类型终端调用微服务接口,实现相应用户功能,具体系统架构如图2所示。

图2 系统架构

本文重点说明业务微服务层设计,云笔记业务非常明确,将其拆分成3个子服务,分别是用户服务、笔记本服务、笔记服务,每个子服务代表独立的设计模块,但技术架构基本相同。初期可以先搭建3台服务器Zookeeper服务器,形成了1个最轻量的负载集群,用来对服务模块的提供方进行注册。由于系统采用Dubbo的服务治理框架,随着数据量和访问量的上升,Dubbo可以使用权重算法分析负载,动态调配系统资源,另外非常重要一点是对服务进行管理和监控,它可以保证系统长时间的在各种复杂的情况下正常运行。部署1台RabbitMQ服务器,消息中间件需开辟一大块内存空间,实现数据短暂存储。部署1台Mysql服务器和1台Re⁃dis服务器,数据访问层数据库实现主从读写分离,引入缓存机制之后,主要的目的为了降低用户访问物理设备的频次,提高服务器响应效率。

2.2 系统数据库表设计

通过对系统中数据的总体分析,可以确定系统中主要实体、属性和实体之间的关系,其中几个主要的E-R图如图3所示。用户和笔记本之间是一对多的关系,即一个用户可以拥有多个笔记本,而一个笔记本只能属于一个用户。笔记本与笔记是一对多的关系,即笔记本中可以保存多条笔记,每条笔记却只能存在一个笔记本中。

图3 E-R模型

2.3 模块功能实现

用户要获取数据需向远程业务服务器发送请求,消费者(控制层)通过定义的接口调用生产者(业务层),内部利用Dubbo协议完成数据传输,如图4所示。整个系统包括主项目dubbo-cloudnote以及3个子项目:①dubbocloudnote-interface,②dubbo-cloudnote-provider,③dubbo-cloudnote-consumer,其中②和③必须依赖于接口项目①。项目①中只定义pojo及业务层用户、笔记本和笔记模块中的接口。

图4 获取远程数据

项目②中需要定义数据访问层mapper接口及业务层各接口的实现类,内部使用TCP-IP协议进行调用。SpringBoot致力于快速方便地开发单个微服务,解决ssm大量手工配置的问题,在SpringBoot中配置文件applcation.yml中添加信息如下:指定dubbo包路径org.gdpi,扫描后代包,定义服务名称provider-note,服务名称和接口一一对应,连接Zookeeper服务注册中心,提供1个主服务和2个备份服务,主服务协议端口为2181,使用dubbo协议,定义服务的端口为20880,每个服务都有自己特定的端口不能重复,如果定义多个provider-note则服务端口号不同。

dubbo:

scan:

basePackages:com.gdpi

application:

name:provider-note

registry:

address:zookeeper://192.168.126.129:2181?

backup=192.168.126.129:2182,192.168.126.129:2183

protocol:

name:dubbo

port:20880

举例笔记服务生产者接口实现:业务方法loadNotes功能是根据用户ID查询笔记信息,其中注解@Service(timeout=3000)规定服务器响应时间3秒超时,内部实现RPC调用,@service引入的包则是com.alibaba.dubbo.config.annotation.Service。

public class NoteServiceImpl implements NoteService{

@Autowired

private NoteMapper noteMapper;

public ListloadNotes(String noteBookId){

......

}

}

综上所述,对老年护理事业大力发展,在对老年人进行治疗的同时,为其提供了更多情感上、心灵上、生活上的帮助,对于构建老有所依的和谐社会具有十分重要的意义。因此为尽快将健全的社区卫生服务体系建立起来,对卫生资源进行合理利用,需要医疗护理人员做出更多的努力。

项目③只定义控制层controller,举例笔记服务消费者实现:利用dubbo的方式为接口创建代理对象,内部同样实现RPC调用,远程RPC调用就像调用自己本地服务一样简单。消费者在服务器内部完成了负载均衡,称之为客户端负载均衡,关键字leastactive表示挑选当前负载压力小的生产者进行访问。

@RestController

public class NoteController{

@Reference(loadbalance="leastactive")

private NoteService noteService;

@RequestMapping("/loadnotes")

public NoteResult findAll(String noteBookId){

......

}

}

3 结语

该架构相比传统分布式架构,解决了开发者在分布式跨域请求过程的繁琐的过程,运行更加稳定,实现“高内聚低耦合”的核心理念。本系统的后期,考虑开发更多的扩展功能,利用分布式搜索引擎增加了用户搜索,系统可以作为共享资源分享自己的笔记,并收藏其他人分享的笔记资源扩充自己的知识行囊。

猜你喜欢

调用分布式笔记本
居民分布式储能系统对电网削峰填谷效果分析
基于Paxos的分布式一致性算法的实现与优化
笔记本
我拥有了愿望笔记本
可爱的笔记本
基于Android Broadcast的短信安全监听系统的设计和实现
爱的笔记本
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析