APP下载

微服务架构下的在线律师网站重构与优化

2021-09-28代立晨

软件导刊 2021年9期
关键词:后台页面律师

代立晨,王 晨

(中南民族大学计算机科学学院,湖北武汉 430074)

0 引言

在“依法治国”战略大力推行和5G 时代来临的大背景下,将法律服务从线下搬到线上是一个趋势。习近平总书记强调,律师队伍是依法治国的一支重要力量,要求切实加强律师工作和律师队伍建设[1]。但长期以来,我国居民习惯于以听广播、看电视的形式获取法律相关知识,以线下前往律师事务所咨询律师的方式获得专业的法律服务,这些方式往往效率低下,不利于律师与客户的前期沟通。在线律师网站可以加强律师与普通用户的沟通,有助于“依法治国”战略的实施,也有助于律师队伍在实战中加强自身素养。

文献[2]提出建设多元便捷的公共法律平台,以满足人民群众对于专业法律知识和法律服务的需求;文献[3]论述了在线法律服务应该遵循的法律规制,阐明了在线律师网站需要遵守的政策要求。现存的在线律师网站多为单体应用架构,所有的功能打包在同一个项目文件下,模块之间的边界模糊、耦合度高。并且,单体应用一且修改便只能作为一个整体去扩展,无法根据业务需求进行灵活伸缩。李春阳等[4]设计并实现了一种基于微服务架构的统一应用开发平台,并成功在国家电网多个项目中投入使用;杨巍等[5]研究了基于微服务架构的图书馆业务系统,并成功在深圳大学图书馆投入运营和使用。这些基于微服务架构的系统迅速在其应用场景下发挥了微服务灵活伸缩、敏捷开发、快速部署的优势。

但是,已有研究中对于如何将微服务与中小型应用网站有机结合的例子并不多,特别是对于如何将在线律师服务与微服务架构网站有机融合的研究还存在不足。本文将在线法律服务和微服务架构软件设计思想有机结合,设计并实现了一个基于微服务架构的在线律师网站,对于中小型应用网站根据自身应用场景进行重构有一定借鉴价值。

1 国内外研究现状

2012 年以来,以绿狗网和律云网为代表的新型在线法律服务网站迅速崛起,其依托电子商务平台,通过互联网和移动互联网的布局,为消费者购买法律服务提供了新的渠道。浙江省司法厅于2015 年开始建设浙江公共法律服务网[2],顺应了时代规律和发展潮流,满足了用户需要。在线法律服务的迅猛发展对于降低律师服务收费和培养消费者通过法律途径解决问题的习惯十分有利,与建设社会主义法治国家的目标相呼应[3]。

2017 年,国家电网公司针对庞大业务系统,以及复杂的开发及维护,提出了基于微服务架构的统一应用开发平台,将微服务架构引入国家电网日常的业务系统中[4]。2020 年,深圳大学基于微服务架构重构了新一代的图书馆服务平台[5],取得了非常好的效果。越来越多的开发者和公司开始使用微服务的概念[6],微服务架构是一种将单个应用程序分解为一系列可独立运行的小服务的软件架构,这些服务实现独立的业务逻辑,可独立部署,并通过轻量级协议进行通信,可以用不同的编程语言编写并采用不同的存储技术[7]。微服务具有低成本扩容、弹性伸缩、适应云环境的优势。

构建一个Web 服务的后端有多种选择,最常见的是PHP、ASP.NET 和Java。根据TIOBE 编程语言排行榜的数据,从2002 年 到2020 年,传 统Web 后端开发语言PHP 和ASP.NET 的热度一直呈缓慢下降趋势,而Java 语言的流行程度呈急速上升趋势,足以证明Java 作为Web 后端开发语言的优越性已经得到了全世界开发者的认可和选择,如图1 所示。

而作为Web 应用的前端部分,当前市面上还是大多数采用Html+CSS+JavaScript 的传统开发方式[8],这种开发方式代码耦合度高、开发周期长、层次之间不够清晰,向后端服务器发起网络请求也比较复杂。传统的Web 应用开发技术已经不能满足用户对于丰富网页形式和富媒体信息的需要[9]。现在主流的Web 框架为Vue.js,React 和Angu⁃lar.js,其并称为“前端三大框架”。其中,Vue.js 于2014 年由在美国读大学的学生尤雨溪发布。Vue.js 是一套构建用户界面的渐进式框架,不但性能优异,最重要的是其比其他两个前端框架更加简单易学,降低了学习成本和开发成本,非常适合中小型应用网站开发。

Fig.1 TIOBE programming community index图1 TIOBE 编程社区指数

以微服务架构重构现有的在线律师网站,不仅要从底层架构思想对现有技术进行重构,还要寻找适合开发应用网站的前后端开发语言和开发框架,将其进行有机整合。经过比较,本系统选择Java 语言作为后端开发语言,使用企业级开发框架SpringBoot 结合SpringCloud 微服务相关技术,选择Vue.js 作为前端开发框架,将现有的在线律师网站从架构思想到开发语言、从后端到前端,进行全面重构。

2 系统需求分析与设计

律师管理系统设计并完成后,由运营人员操作后台管理系统并对数据进行管理,Web 端主要负责展示数据,可满足用户以下4 个方面的要求:

(1)找律师。用户通关短信验证码注册登陆普法律师网后,可以浏览网页,寻找感兴趣的律师进行在线咨询,咨询法律相关问题。

(2)学法律。用户可通过普法律师网的“公开课”页面,观看律师上传的普法视频,在线学习法制相关知识。

(3)观案例。用户可通过浏览网页查看相关案例的判决结果和律师对于该案例的专业分析。

(4)看热点。普法律师网会在网站上及时发布并更新近期新闻媒体报导的法制新闻热点。

2.1 系统分析

普法律师网是一个B2C 架构的法制综合平台,集找律师、学法律、观案例、看热点等多种功能于一身,其分为前台用户系统和后台运营平台。具体设计如图2 所示。

根据系统需求分析,普法律师网主要服务于律师和注册用户,由于律师的专业性,要求律师线下将相关资料和证件信息提交给系统运营人员进行审核。系统运营人员审核律师提交的材料,在后台管理系统对官网信息进行及时更新,普通注册用户和律师登陆官网使用本网站提供的相关服务。通过上述分析,普法律师网的用户可分为以下几类:

(1)系统管理员。主要负责后台管理系统操作、律师信息审核、系统律师管理、课程分类管理、公开课管理、内容管理等。

Fig.2 System function architecture图2 系统功能架构

(2)注册用户。注册用户分为普通用户和律师。普通用户可以浏览律师的个人页面、观看公开课视频、浏览案例信息和热点信息、向律师发起咨询;律师可以在官网上回复用户留言,上传公开课视频等。

2.2 系统设计

前端主要用于用户交互和数据展示,后端主要负责接收前端的请求,并迅速作出响应。前端分为官网和后台管理系统,其主要分工和使用到的技术有所不同。Web 端主要面向非系统管理员角色,用户在注册成功并登录官网后,可以使用系统提供的服务。

后台管理系统主要面向系统运营人员,系统运营人员可以对数据库的数据进行增删改查操作,并对Web 端页面的展示数据进行及时管理和更新。

后端对Web 端和后台管理系统的请求及时作出响应,并保证整个系统运行的稳定性。

2.2.1 前端设计

前端主要分为表现层和服务层。

(1)表现层使用HTML5 和CSS3 设计网站页面,使用AJAX[10]向服务端API 发起异步请求,AJAX 通过JavaScript脚本向服务端发起请求,使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,只对当前网页需要更新的部分进行更新;表现层使用开源可视化图表库ECharts 进行图表绘制。

本系统服务层还针对百度、搜狗等做了搜索引擎优化(Search Engine Optimization,SEO)[11],使开发的网站有更大的概率在百度等流量入口获得更高的排名,有助于帮助网站获取更高的人气和流量。

(2)前端表现层主要包括前端代码的运行环境Node.js、前端框架Vue.js,使用简洁易用且高效的http 库Axios 发送网络请求,其中官网部分使用基于Vue.js 构建的框架Nuxt.js 进行开发,Nuxt.js 是一个基于Vue.js 的轻量级应用框架。传统网站每次加载一个新的页面便要向系统请求一个新的资源,给后台服务器造成了很大压力。Nuxt.js 通过服务器端渲染(SSR),代码结构分层清晰,支持网站资源热加载,降低了网站开发难度和加载时间,具有非常好的用户体验。前端项目开发完成后,使用webpack 进行项目的打包和发布。具体设计如图3 所示。

Fig.3 Front-end hierarchy图3 前端层次结构

2.2.2 后端设计

后端主要分为业务层、用户层、服务层、并发层和存储层5 个层次。

(1)业务层引入了阿里云的第三方服务,主要包含阿里云视频点播服务(Video on Demand,VOD)、阿里云对象存储服务(Object Storage Service,OSS)、阿里巴巴的开源ex⁃cel 文件处理框架EasyExcel、阿里云短信服务(Short Mes⁃sage Service,SMS)。

(2)用户层主要对用户进行认证和授权,采用开放授权协议的第二版OAuth2(Open Authorization,OAuth)进行微信登录[12],使用单点登录(Single Sign On,SSO)技术,用户只需登录一次,便可以访问系统中的多个服务模块。登录时,使用基于token 的鉴权机制JWT(Json Web Token,JWT)[13]将用户登录的账户名和密码进行加密,保证用户账户安全。

(3)服务层使用Nacos 对多个微服务模块进行统一管理和远程配置,后台系统的消息传递使用遵守高级消息队列协议(Advanced Message Queuing Protocol,AMQP)的开源消息中间件RabbitMQ。

(4)开发层选用了当下最为流行的Java 开发框架SpringBoot2.2 和SpringCloud,SpringBoot,可以大大简化Java应用搭建和开发步骤。

SpringCloud 作为微服务系统架构的一站式解决方案[14],提供了诸如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等功能,SpringCloud 提供了一套简易的编程模型,使得程序能在SpringBoot 的基础上轻松地实现微服务项目构建。

为了简化Java 应用程序对数据库的操作,还引入了Mybatis Plus 作为引用的持久层框架。Mybtis Plus 在Myba⁃tis 的基础上进行优化,只需进行简单配置,即可快速进行单张数据库表格的增查改删操作,可以节省大量时间,My⁃batis Plus 还集成了大量插件,可以实现数据分页查询、字段自动填充、逻辑删除等常用功能。

(5)项目的存储层选用了开源流行的MySQL 数据库以存储大部分数据。为了增强系统运行速度和用户体验,引入非关系型数据库Redis 作为项目的缓存数据库[15],Redis数据库是一款基于内存的高性能数据库,可以对关系型数据库起到很好的补充作用。后端设计如图4 所示。

Fig.4 Back-end hierarchy图4 后端层次结构

2.2.3 数据库设计

MySQL 数据库设计遵循阿里巴巴出版的《码出高效:Java 开发手册》[16]中定义的MySQL 数据库建表规约,其中主要遵循了以下原则:

(1)表必备 三字段:id、gmt_create、gmt_modified。其中,id 必为主键。gmt_create、gmt_modified 的类型均为da⁃tetime 类型,前者现在时表示主动创建,后者过去分词表示被动更新。

(2)表达是与否概念的字段,必须使用is_xxx 的方式命名,数据类型是unsigned tinyint(1 表示是,0 表示否)。本系统考虑到数据备份的需要,使用逻辑删除处理删除请求,数据库中逻辑删除字段命名为is_deleted。即用户向后台发出删除数据请求时,只是将需要删除的数据中的is_deleted 字段更新为true,即只对数据作update 操作,不作delete 操作。而在作select 操作进行查询时,补充查询条件逻辑删除字段为false,这样既满足了系统数据备份和对数据的保护,也满足了查询和删除请求。

(3)不得使用外键与级联,一切外键概念必须在应用层解决。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。本系统通过添加冗余字段和对表作切割处理的方式,不使用外键和级联,以免外键和级联影响到数据查询和数据插入速度。

Redis(Remote Dictionary Server,Redis),即远程字典服务,是一个开源的使用ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API[17]。SpringBoot 对Redis 数据库也进行了封装,实现了很好的支持。当用户第一次访问首页时,从MySQL数据库中查询数据,并实现主从同步,将MySQL 中查询出的数据封装为对象,再将MySQL 数据库的数据序列化为Redis 数据库的键值对形式进行同步存储。当用户第二次访问首页时,即可直接从Redis 数据库中进行查询,具体如图5 所示。

Fig.5 Cache design principle图5 缓存设计原理

Redis 数据库主要应用于以下使用场景:

(1)全页面缓存。因官网采用服务器端渲染,虽然减少了Web 端的网络请求次数,但是若为每个请求都重新渲染页面,会给服务器造成很大的压力。因此,使用Redis 将首页“广告Banner”,“热门律师”和“热门公开课”模块缓存起来,可以极大加快首页加载速度。

(2)“Session”存储。当访问服务器某个网页时,会在服务器端的内存里开辟一块内存,这块内存就叫作Session,而该内存是跟浏览器关联在一起的。因Redis 具有缓存数据持久化的能力,将“Session”存储在Redis 中,可以避免“Session”突然消失带来的用户体验问题。

3 系统功能实现与测试

3.1 首页

官网首页采用简洁明朗的设计风格,顶部和底部采用组件化设计,只刷新中间的内容区域,复用顶部的Ap⁃pHeader 组件和底部的AppFooter 组件。

顶部导航栏包括首页、律师、公开课、问答、文章5 个主要模块,以及网站搜索框和登陆注册按钮。底部包含友情链接和网站的版权信息以及ICP 备案号等,底部还添加了微信二维码和微博的跳转链接。

网页中部主要为内容展示区域,通过Vue 框架的动态路由进行页面刷新和跳转[18]。首页主要展示广告Bannner以及热门律师和热门公开课两个本系统的主要功能模块。具体如图6 所示(彩图扫OSID 码可见)。

Fig.6 The official website homepage图6 官网首页

3.2 后台管理系统

后台管理系统和首页使用的技术栈都是Vue 框架,只是实现起来稍有区别,具体开发流程如图10 所示。

Fig.7 Vue framework development process图7 Vue 框架开发流程

使用开源组件和模板可以极大加快开发迭代速度,做到“开箱即用”。后台管理系统使用vue-admin-template 进行搭建,页面和功能设计如图8 所示。vue-admin-template是一个后台前端解决方案,它基于前端框架vue.js 和饿了么公司的开源组件库element-ui 实现。它使用了最新的前端技术栈,内置i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,可帮助快速搭建企业级中后台产品原型。后台管理系统主页面分为左侧的导航栏,可以对页面功能进行路由跳转;右侧的上方为搜索框,可以向Java 后台发起数据筛选和多条件组合查询;右侧下方为内容展示区域,主要方便运维人员对系统数据进行管理。

3.3 功能测试

系统主要使用Swagger 和Sentinel 工具配合进行功能测试。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful 风格的Web 服务[19],可以自动扫描Java 项目暴露的接口,其提供了非常简单易用的UI 界面,并通过内置工具模拟网络请求。在SpringBoot 项目中集成Swagger 后,通过访问浏览器的“localhost:端口号/swaggerui.html”地址,即可访问Swagger 的Web UI 界面。通过点击Swagger 提供的按钮即可向后台接口发起网络请求,并立即看到响应结果,通过该方式可以测试Java 后台项目各接口运行情况。

Sentinel 是由阿里巴巴开发并开源的面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度帮助开发者保障微服务的稳定性。Sentinel 同时提供实时监控功能,可以在控制台中看到接入应用的单台机器秒级数据,甚至500 台以下规模集群的汇总运行情况。

QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力。通过Swagger 对后台接口发起请求,结合Sentinel 生成的图表,可以实时测试系统的QoS 和响应时间[20],以此判断系统的性能和稳定性。经过软件测试,使用Swagger 工具多次向系统后台接口发起网络请求,同时打开Sentinel 的后台监控页面,可以看到系统运行状况,如图8 所示。

Fig.8 Sentinel test results图8 Sentinel 测试结果

分析测试结果可以发现,系统在每秒多达1 000 多次的网络请求压力测试下[21],单一接口无拒绝访问的状况发生,且系统的平均响应时间不超过5ms。该测试充分说明了基于微服务的在线律师网站架构设计合理,运行稳定,体现出基于微服务架构的应用网站的性能优势。

4 结语

可以看出,在网站应用用户快速增加的情况下,不仅要加快开发速度,还要使系统各功能模块之间弱耦合、可分离,微服务架构的出现很好解决了应用网站耦合度高、无法迅速迭代开发、升级维护困难等问题。在前后端编程语言选择上,本文选择了当下非常火热的SpringBoot 框架和Vue.js 框架,其作为前后端开发的热门框架,很好地满足了当今时代对于网站应用的需求。

本文针对当前居民对法律知识和专业法律服务的需求,基于微服务架构对传统在线律师网站进行了重构,系统采用前后端分离的方法,在前端和后端开发过程中,又采用了分层设计、层层分离的开发模式,在后端将业务分解为不同的微服务,有效降低了代码开发的耦合度,降低了后端服务器压力,也有效保障了系统的稳定性。通过对一个在线律师系统的设计与开发实践,给出了一种可供现有传统非微服务架构中小型应用网站参考的重构方案。预计将来会有越来越多的开发者和公司选择使用基于微服务架构的SpringBoot+Vue.js 对现有传统架构网站进行重构和升级,带给用户更好的体验。

猜你喜欢

后台页面律师
刷新生活的页面
“新婚姻法”说道多 听听律师怎么说
“建设律师队伍”:1950年代的律师重塑
我遇到的最好律师
后台暗恋
前台、后台精彩花絮停不了
以“后台”的名义节省电池用量
怎样才算是真正的律师?
电力调度中后台监控系统的应用
网站结构在SEO中的研究与应用