微服务

​ 2019年4月,本人所在公司承接了某法院的《在线诉服管理平台》,该系统以当事人在线立案功能为核心,分为案件基本信息查询、案件相关材料上传、开庭信息通知等功能。本人有幸在该项目中担任架构师一职,进行系统的架构设计并进行技术选型,本系统采用微服务架构设计,将整体系统拆分为:web 服务管理模块,用户信息管理模块,案件信息管理模块,材料信息管理模块,开庭信息通知通模块。系统以 zookeeper 为服务注册管理中心,管理多个服务的注册与调用问题。因为系统的主要功能模块为立案模块,为防止服务失效采用 nginx 和服务集群来进行冗余处理。最后将各个服务模块打包编译,与不同服务器进行模块部署。整体系统历时 1 年,于 2020 年成功上线,至今已稳定运行 1 年半,深受用户好评。

​ 随着信息化时代的发展,法院信息化已成为时代潮流中不可阻挡的一部分,法院信息化的目的既是为了服务人民,方便老百姓的立案操作,同时也是为了通过信息化技术提升审判的质量与效率,以更直观的方式,进行法院的立案信息细分析。2019年4月,本人所在公司承接某法院的《在线诉服管理系统》项目,该项目以当事人在线立案为核心功能,以更智能、更直观的在线立案界面以及相关提示,代替了原本流程复杂的线下立案流程,避免当事人在不同的窗口来回奔波,也减轻法院工作者的工作负担。当事人可以在家就进行在线立案,实时上传案件相关材料,查看案件进展情况。将材料上传到网上,也便于法院工作者的相关审核操作,防止了材料丢失、漏带的现象。法院工作者,也可以在系统上查看各个时间段法院的立案情况,更直接,更快速的把握法院立案类型趋向。在该项目中,本人担任系统架构师的职责,进行系统的架构设计,技术选型以及相关的职责分配。

​ 近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统单体软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。经过现场调研,用户访谈,深入了解了法院立案过程以及该系统的主要使用场景,本系统决定采用微服务架构来开发。在传统的单体架构系统中,所有功能模块都属于同一个系统,各模块之间耦合程度过高,关系紧密,单个功能模块出现问题可能将导致整个项目的失效,各功能模块可拓展性差。与之相比,微服务架构优势明显:1.微服务把每个职责单一的功能放在一个独立的服务中。2.每个服务允许在一个独立的进程中。3.每个服务有自己的数据存储,每个服务有自己独享的数据库、缓存、消息队列等资源。4.每个服务有多个实例在运行,每个实例可以运行在容器化平台内,达到平滑扩展伸缩的效果。5.每个服务应该有自己的运营平台,以及独享的运营人员,这包括技术运维和业务运营人员。每个服务都高度自治,内部的变化对外透明。6.每个服务都可根据性能需求独立的进行水平伸缩。本文接下来,将于模块划分,具体实现,项目部署来对微服务架构风格进行描述。

1、模块划分

​ 通过分析核心业务系统的需求,我们拆分服务秉承一个原则,就是不同微服务的边界明确,不重复开发相同的业务,也就是职责单一原则。并且我们对数据库也进行来拆分,要求每一个服务都有自己的的数据库,不能直接访问其他服务的数据库。每个微服务可以将自己的业务暴露成服务,供其他服务进行调用。本系统基于功能划分,分为5个模块。1、web 服务模块:该模块负则前后端数据交互。2、用户信息管理模块。3、案件信息模块:该模块主要负责管管理在线立案、案件查询功能。法院工作者还可以通过该模块获取历年度案件信息,进行年度分析。4、材料信息管理模块:负责立案材料的管理,案件当事人将相关材料上传系统,法院工作者进行审核,通过之后存入系统。案件当事人和法院工作者可以实时进行查看。5、开庭信息通知通模块:该模块会将开庭信息以邮件、短信的方式,通知原告、被告、法官。

​ 2、具体实现

​ 由于系统功能模块众多,本系统采用了 zookeeper 来作为服务注册中心,系统种所有的服务都将注册到服务注册中心,同时也可以从服务注册中心获取当前可用的服务清单。系统的核心功能为立案功能,为了避免核心功能的失效本系统针对立案功能模块建立了服务器集群,用户登陆系统进行立案操作时,首先通过 Nginx 负载均衡服务器,将请求转发到对应的功能服务器上,即使某个立案功能服务器出现问题,系统也能正常运行。在负载均衡算法的选择上,使用最小连接法,每当用户的请求来临时,任务分发单元会将任务平滑分配给最小连接数的前端网站节点,这样的架构以廉价且透明的方式扩展了服务器和网络的带宽,可以大大提升系统的并发量,同时保证网站前端整体的稳定性和可靠性。

​ 3、项目部署

​ 与之前的单体项目部署方式不同,该系统因存在多个功能模块,因为用户信息和案件信息的重要性,将用户信息模块、案件信息模块、材料信息管理模块部署在法院内网服务器上。web 服务管理模块、开庭信息通知模块部署在外网服务器上。法院提供了一台可用于进行内外网交换的服务器,将 zookeeper 安装于该服务器上,进行内外网各服务的管理。中途,有开庭信息通知模块因为设计信息通知需求的变更,需要进行更新处理。由于分布式部署的机制,再进行功能优化的时候,只需再相关服务器上更新该功能模块,提升了更新的效率,保证的部署的安全性,同时也没有影响其他系统用户的操作体验。

​ 该系统前后开发耗时统计 9 月 于 2020 1 月上线,至今已稳定运行1年余多。截至目前,该诉服系统已兼容3个省份多家法院的在线立案功能。已有 1000 以上法院工作者,在线承接了 300000 以上的网上立案信息。获得了法院工作者和案件当事人的一致好评。但是在系统运行过程中,也出现了一个问题。案件当事人在进行案件立案时,因为材料审核不通过导致立案失败,但是其案件状态仍为正在审核中。后来发现,是因为不同服务间数据库独立,存在分布式事务的问题,案件信息管理数据库更新失败并没有引起材料管理信息数据库回退,存在数据库不一致现象。为了解决该问题,决定采用两阶段提交方式,引入一个协调者,询问各个事务数据源是否准备好,第二个阶段真正将数据提交给事务数据源。协调者记录各个数据执行情况,如果都为 yes 则提交事务,有一个提交失败则进行事务回滚。以此来解决分布式事务问题。

​ 实践证明,该诉服系统项目能够顺利上线,并且稳定运行,与系统采用了合适的架构风格密不可分。经过这次微服务架构应用的方法和实施的效果后,我也看到了自己身上的不足之处,在未来还会不断地更新知识,完善本系统的架构设计,使整个系统能够更加好用,更有效地服务于法院工作者和案件当事人。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐