动维不仅是执行者、更是思想者
动维如何将您的想法落地,从产品策划到开发实施,再到技术运维
首页 > 动维视野 > 动维观点
省级地理标注管理平台-技术方案
发布时间:2021-01-14 11:35:48

一、业务设计方案

 

1.业务总体规划

应用层级架构:业务及技术逻辑流程图;从用户应用的角度,梳理技术架构的层级关系。

 

 

2.业务功能理解

 

二、技术实现方案

系统技术架构方案必需从各个方面满足实际需求,这是技术架构的设计目标。同时在设计与开发的过程中严格遵守技术架构的约束,从而保证可以实现架构设计的最终目标。

1.技术实现

1.1系统实现方式

定制开发软件 ü

技术设计达到目标:安全性原则、扩展性原则、性能原则、适用性原则、开放性原则。

1.2开发环境

使用Git进行配置管理

使用Excel编制项目开发计划

使用PowerDesigner进行数据库概念模型设计

使用office编写文档

使用eclipse作为开发工具

使用Tomcat8作为应用服务器

使用Oracle 11g,Mysql作为数据库服务器

1.3运行环境

开发语言:Java

JDK版本:1.8

数据库:Oracle 11g, MySQL ,字符集要求:utf-8

应用服务器:Tomcat 8.0

操作系统:CentOS7.4

B/S架构为主,需要支持主流的浏览器,例如ChromeEdgeFireFoxIE8-IE11

第三方插件免费开源

APP支持常用的移动设备

1.4开发规范

遵循阿里开发规范标准

1.5接口设计

接口设计是指服务端和客户端之前的数据传输约定规范,客户端将用户交互行为所产生的有效数据通过接口传回服务端进行添加,删除,查询,修改,存储等操作,服务端完成相关操作并将产生的数据和操作结果反馈给客户端,客户端接收到数据之后将数据通过预定的协议进行解析并展现到视图层。客户端接口设计是开发效率和软件工作性能的重要保障,良好的接口设计需要满足以下需求:

接口设计符合产品最终的交互需求,一次交互最多产生一次接口请求,涉及的多种业务数据行为在服务端进行拆解和组合。

最大化优化接口的输入和输出参数,服务端需要过滤冗余数据字段,避免不合理的数据解析结构,防止大量数据导致的网络流量损耗和请求延时。

短时请求模式尽量采用HTTP+JSON的数据传输方式,即时通讯等实时功能采取Socket传输方式,最大程度的减少冗余数据字符。

对于数据安全性采用设备唯一标示绑定,Base64位加密和token令牌机制混合的方式,保证接口数据的安全性。涉及到高安全性要求的接口采用HTTPSRSA非对称加密请求方式,保证接口通信的安全性。

提供接口设计说明、数据结构和相应开发指引,同时确保接口开发的规范化,具备纠错、检错、重传等机制,避免对第三方系统造成直接影响。

Ø 安全规范

1.API实现token验证机制,服务端实现对应的校验功能,可做到接口访问的实时关闭及开启;

2.token存放于header中,key=x-authentication-token

3.token的生成规则使用JWT

Ø 定义规范

1.接口设计默认使用Rest格式;

2.报文格式统一为JSON

3.新创建的项目不再允许使用数据库连接(含视图)的方式进行数据交互或同步;

4.含有接口的项目在wiki上定义出符合规则的API文档;

5.开发或运维人员要保证对应系统API文档的及时性和准确性;

1.6设计规范

符合设计规范要求:易用性、规范性、兼容性、合理性、美观与协调性

2.平台总体规划

2.1平台建设原则

以成熟软件产品为基础,通过个性化开发服务供应商平台系统需求。项目的建设实施应遵循以下原则:开放性、先进性、灵活性、安全性、稳定性、可扩展性、可审计性;开放性系统应具有开放的体系结构,保证与相关系统(操作系统、数据库、开发语言)的互联、互通、互操作,能实现第三方应用软件的方便接入。

1) 先进性

系统采用符合信息技术发展趋势的先进技术,要求相应的产品、技术在市场和服务等方面处于领先地位,以达到保护投资和利于系统长期维护、升级的目的。

2) 灵活性

要求在系统设计上,支持集中式和基于IP的分布式等多种网络结构,具备灵活的任务及嘉宾配置与管理能力,使得系统可以根据客户需求对任务及嘉宾进行定义,且能够支持系统在全球各地进行分布式部署。

3) 可扩展性

系统应支持硬件平台以及软件上的扩展能力;系统通过模块化、参数化的设计与实施,达到日后方便维护的目的。做到运行稳定、易于维护;系统的设计容量能满足未来业务发展的需要,能通过系统预留的升级接口独立地、平滑地进行升级,功能扩展不会明显影响整体系统效率。

4) 稳定性

核心系统或服务能部署双机热备,重要组件负责均衡、避免单点故障,故障切换过程整体业务不中断,可以提供异地灾备解决方案,能良好保证系统的高可用性能,最大化缩短故障停机时间,提供已在国内部署的案例。

系统应具有较高的可靠性和持续使用能力,具有强大的并发处理能力,保证3×24小时稳定运行,同时制定了系统应急预案,保障系统故障后能根据预案快速恢复。

5) 安全性

系统须具有严谨周密的安全体系结构,具备良好的安全性,能够实现网络、数据库、业务应用等多方面的整体安全考虑,必须提供全方位、多层次的安全机制,抵御可能产生的恶意攻击,并且在数据安全、网络安全、客户端安全和应用系统安全等方面有合理可靠的安全策略。

支持身份验证、权限控制、数据加密审计等功能,且嘉宾、报告等敏感数据必须进行加密处理,保障信息的安全性。

6) 可审计性

记录所有数据操作和访问的准确、可再现的痕迹,并做出适当分类以便稽查。

2.2系统整体逻辑架构

 

                          

· 平台采用SOA面向服务架构,应用系统之间通过RPC服务、或消息的形式进行通讯;

· 各应用系统的业务之间松耦合、可扩展;

· 分布式集群部署,确保稳定性,避免单机、单应用系统宕机而影响业务整体使用;

· 多层结构设计,分割为展现层、业务层、组件层、数据层,业务独立,提高扩展性。

· 尽可能将用户访问请求向前推:使用缓存服务器,和传输压缩技术,减少后台服务器和数据库服务器压力

 

展现层的应用系统,负责与用户进行交互,展示页面,一般没有复杂业务逻辑,与业务层通过RPC调用等方式,完成用户在前台执行的业务操作。如网站主站的展示、登录中心负责全站的登录,等等。

业务层的应用系统,负责完成业务流程的实现,业务层应用系统应该是根据非常明确的业务边界进行划分,并且通过明确定义的接口向外提供服务;展现层通过业务层提供的接口访问数据,完成业务操作。如会员体系构建、商户体系构建、商品、类目等体系构建,等等。

组件层的应用系统,负责支撑整个平台正常运作,提供基础保障,组件层的一部分功能可以分散到业务层各个系统内部,但这样会造成业务过于分散,不便于维护。如封装消息队列组件搭建统一的消息中心,支撑全站消息转发;封装定时任务组件搭建统一的调度中心,支撑全站的定时任务调度,等等。

存储层,包括文件存储,关系数据库,缓存等构成。

2.4系统整体拓扑结构

 

2.5服务器部署架构

3.系统技术架构

微服务是目前最先进的架构设计思想,在许多国内外大互联网公司得到成功的应用,其核心是化繁为简、化整为零,把应用分解为小的服务模块进行独立开发。微服务的这一特点使其便于部署到容器,对整个开发、测试、运维都发送了革命性影响,有力地支持了devops开发,便于敏捷开发和自动化测试,利于独立部署、维护升级和故障处理,提高效率和质量,带来了一系列优势。

化整为零的思路不是开发一个巨大的单体式的应用,而是将应用分解为小的、相互连接的微服务。一个微服务一般完成某个特定的功能,比如订单管理、用户管理、发票管理等等。微服务还会发布API给其他微服务和应用客户端使用。其他微服务完成一个WEBUI,运行时,每个实例可能都时一个虚拟机或者时docker容器。

Spring cloud是微服务开发的优秀框架,在springboot的基础上进行开发,spring cloud为开发者提供了在分布式系统(如配置管理、服务发现、短路器、智能路由、微代理、控制总线、一次性token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用spring cloud开发者可用快速实现上述这些模式。

微服务的特点在于根据业务提炼不同的服务,系统经过拆分,根据不同的功能划分出基础服务和核心服务。各子系统调用多个核心服务完成功能,核心服务调用多个基础服务。核心服务之间和基础服务之间不能互相调用。一般服务模块只能访问自己的数据库,对其他数据库的数据,通过调用其服务提供的接口完成。

要搞好服务抽象,确定服务边界,确定合适的服务粒度,服务高内聚、低耦合,充分复用,还需要合理划分服务的数据库,实现高度自治。

3.1架构优势

1) 复杂度可控

微服务架构在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一的功能,并通过定义良好的接口清晰的表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模的团队来完成,易于保证可维护性,并提高团队开发效率。

2) 可独立部署

由于微服务具备独立的运行进程,所以每个微服务都能够独立部署。当某个微服务发生变更时,无需编译、部署整个系统。由微服务组成的应用相当于具备一系列可并发的发布流程,使得发布更加高效,同时降低了对生产环境所造成的风险,缩短应用交付周期。

3) 技术选型灵活

微服务架构下,技术的选型是多样化的。每个团队根据自身服务的需求和行业发展的现状,自由选择合适的技术。由于每个微服务相对简单,当需要对技术进行升级时,所面临的风险较低,甚至完全重构一个微服务也是可行并容易的。

4) 易于容错

当架构中某一组件出现故障时,如果在单一进程的传统架构下,故障很有可能在进程内扩散,导致整个应用不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可以通过重试、平稳退化等机制实现应用层面的容错。

5) 易于扩展

单个服务应用也可以实现横向扩展,这种扩展可以通过将整个应用完整地复制到不同的节点中实现。当应用的不同组件在扩展需求上存在不同的差异时,微服务架构则体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

6) 功能特定

每个微服务都有自己的业务逻辑和适配器,并且一个微服务只完成某个特定的功能,例如商品服务只管理商品、客户服务只管理客户等。这样开发人员可以完全的专注于某一特定的功能的开发,而不用过多的考虑其他,从而提高开发效率。


 

3.2业务流程

3.3核心技术点

 

本项目采用VUE.js作为前端开发框架,Spring Cloud组件作为分布式支持,采用Redis作为缓存,采用Mybatis作为数据持久层框架,选用MySQL作为数据库,选用Docker部署方式。

3.4技术优势

成熟开源架构-微服务架构源于Spring团队,是目前业界最受欢迎的分布式架构。可以支持百万级UVPV,超过3000QPS

1.先进可靠的架构设计-支持海量图片的迅速定位和查询。采用应用和数据分离,核心业务和非核心业务分离,不同业务之间异步解耦的架构设计,有利于新业务快速上线和修改。

2.数据主从结构,读写分离-采用Mysql数据库集群,主从备份,解决了I/O瓶颈,适合高并发环境。

3.前后台分离-前台新增或者修改,不会影响后台服务和数据;更安全,更快捷。

4.互联网运营级产品-采用运营级缓存和页面静态化方案,支持高并发和大数据的分布式处理架构;

5.安全框架-基于java安全框架(Shiro)进行扩展,实现了一套比较通用的RBACRoleBased Access Control,基于角色的访问控制)设计,能够对于不同粒度的需求进行灵活使用;

6.页面静态化-直接除去了读取数据库的操作,减少了环节,提高了网站反应速度,提升用户体验;将后台地址隐藏,避免了黑客攻击,提高了安全性;

1) 前端采用Vue.js框架

Vue.js是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.jsVue.js提供了更加简洁、更易于理解的API,能够快速地上手并使用Vue.js;同时比起React + Redux相对复杂的架构,Vue.js更加轻量级也更加容易上手。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。Vue的核心思想为数据驱动和组件化。

2) 服务端使用Spring&SpringMVC框架

项目采用Spring Boot框架并集成Spring Cloud相关组件,实现微服务分布式应用。Spring Boot框架是基于Spring框架基础上,和Spring框架紧密结合用于提升Spring开发者体验的工具。所以Spring Boot框架的核心仍然是Spring框架。通过Spring Boot搭建的项目拥有Spring的核心模块,并且可以使用Spring的众多特性。

1.核心容器,核心容器提供spring框架的基本功能,核心容器的主要组件是BeanFactory,他是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性与实际的应用程序代码分开;

2Spring上下文,是一个配置文件,该配置文件向spring框架提供上下文信息;

3Spring AOP,通过配置管理特性,Spring AOP 模块直接将面向切面(方面)编程功能集成到spring框架中;

4Spring DAOJDBC DAO抽象层提供了有意义的已成层次结构,可用该结构管理异常处理和不同数据库抛出的错误信息,极大的降低了异常代码数量;

5Spring ORMSpring框架插入了若干个ORM框架,从而提供了ORM的对象工具,其中包括了HibernateMybatis

6Spring Webweb上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供上下文;

7Spring MVC,该框架是一个全功能的构建web应用程序的MVC实现。MVC容纳了大量视图技术,其中包括JSPVelocity等。

3) 服务端使用Mybatis作为ORM框架

项目采用Mybatis作为ORM框架,提供持久层的实现。

MyBatis是支持普通SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

Mybaits有以下优点:

1.灵活,Mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多;

2.解除sql与程序代码的耦合,通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

3.提供映射标签,支持对象与数据库的orm字段关系映射;

4.提供对象关系映射标签,支持对象关系组建维护;

5.提供xml标签,支持编写动态sql

4) 数据库使用MySql数据库,并做主备

MySQL是一个关系型数据库管理系统,目前MySQL被广泛地应用在互联网上的网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

5) 服务端使用SpringBoot框架提供微服务架构

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

SpringBoot的优点:

1. Spring Boot 可以支持你快速的开发出 Restful 风格的微服务架构;

2. 自动化确实方便,做微服务再合适不过了,单一jar包部署和管理都非常方便。只要系统架构设计合理,大型项目也能用,加上nginx负载均衡,轻松实现横向扩展;

3. Spring Boot 要解决的问题, 精简配置是一方面, 另外一方面是如何方便的让spring生态圈和其他工具链整合(比如redis, email, elasticsearch)

6) 服务端使用SpringCloud提供分布式支持

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。

Spring Cloud Config配置中心

Spring Cloud Config就是我们通常意义上的配置中心。Spring Cloud Config-把应用原本放在本地文件的配置抽取出来放在中心服务器,本质是配置信息从本地迁移到云端。从而能够提供更好的管理、发布能力。

Spring Cloud Config分服务端和客户端,服务端负责将gitsvn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的refresh

Spring Cloud Eureka提供在分布式环境下的服务发现,服务注册的功能。

Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

Spring cloud Hystrix 熔断器

断路器(Cricuit Breaker)是一种能够在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施。

断路器(Cricuit Breaker)是一种能够在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施,Spring Cloud通过NetflixHystrix组件提供断路器、资源隔离与自我修复功能。

Spring Cloud Zuul 服务网关

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

SpringCloudRibbon客户端负载均衡

RibbonNetflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。Ribbon客户端组件提供一系列完善的配置项,如,连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。

7) 使用Redis缓存用户会话和高频访问数据

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

1Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;

2Redis不仅仅支持简单的key-value类型的数据,同时还提供listsetzsethash等数据结构的存储;

3Redis支持数据的备份,即master-slave模式的数据备份。

Redis的优势在于:

1.性能极高,Redis能读的速度是110000/s,写的速度是81000/s ,完全支持高并发的场景下使用;

2.丰富的数据类型,Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作。

3.原子操作,Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来。

4.丰富的特性,Redis还支持 publish/subscribe, 通知, key 过期等等特性。


上一篇
官方平台

官方微博

微信公众号

电话咨询
13811180443
服务时间:09:00-22:00
在线咨询