SpringBoot2搭建基础架构——开源软件诞生4

技术框架篇--第4篇git

用日志记录“开源软件”的诞生github

赤龙ERP开源地址:算法

点亮星标,感谢支持,加微信与开发者交流 kzca2000缓存

码云:https://gitee.com/redragon/redragon-erp安全

GitHub:https://github.com/redragon1985/redragon-erp微信

赤龙ERP官网:https://www.redragon-erp.com架构

SpringBoot2搭建基础架构——开源软件诞生4

 

准备工做

搭建基础框架前,必定要准备好开发环境。先安装软件(以我本地环境为例),包括:并发

  • IDE(Eclipse最新版)app

  • JDK1.8负载均衡

  • Tomcat8.5

  • MySQL8.0

  • Redis最新版

  • SVN、Git

安装流程不作详细说明。说几个须要注意的地方:

(1)Tomcat安装好后须要对server.xml作一些配置和优化(端口、应用、域名、NIO、线程池、SSL等)

(2)对JVM作必要的内存配置优化

(3)MySQL安装时注意编码UTF-8

(4)Redis须要配置密码和持久化(AOF)

框架的基本要求

搭建应用的底层框架,老是要或多或少的根据情景考虑一些问题,而不能是框架和技术的简单堆砌。那么搭建框架要知足哪些要求呢?

(1)安全性:因为是信息化管理系统,使用的用户是企业内部的职员和高管,那么对于安全性和权限的考虑就要提高一个层次了。好比:谁能访问哪些功能、谁能作哪些操做,谁能看到什么数据、又使用什么方式能够更便捷的实现各类安全性的考虑。

(2)下降信息流的复杂性:简单解释一下,ERP系统是一个很特殊的系统,由于它是企业中复杂管理流程、业务流程、财务流程的实现。因此它有着严密的逻辑与流程,系统中几乎没有独立的模块或功能,系统内部各部分互相依赖的复杂程度不可思议。如何下降这些依赖关系的复杂度,就是框架中火烧眉毛解决的问题。

(3)提升开发效率:信息化系统开发时的一大特色就是代码复用程度高,不管是重复的增删改查,仍是表单处理,设置是各类报表,太多的重复工做会浪费太多的时间。开发人员应该把工做集中在逻辑和算法上面,而不是这些简单的复制粘贴修改上。

(4)灵活的可配置可扩展:信息化系统的另外一个特点就是个性化需求很是高,即便对于一个简单的流程,也可能出现多样化的各类要求。这每每根据企业的管理状况而定。如何竭尽所能在减小客户化开发的前提下,知足更多的需求是咱们要考虑的问题。

(5)下降学习成本和维护成本:因为这是一款开源软件,咱们要考虑的不能仅仅是高大上的技术使用,而是要能让更多的开发者和使用者,能够快速部署,并进行个性化开发。不管在展现层、控制层、持久层,仍是在各第三方组件的使用中都要尽可能考虑到如何让更多的人可使用咱们的软件。

如何解决问题

SpringBoot2搭建基础架构——开源软件诞生4

 

针对以上的要求,咱们如何设计系统,解决问题,并最终搭建知足咱们需求的底层框架呢?咱们一块儿来尝试摸索一下。

  1. 说到安全性,就离不开登录、权限、加密这些场景。
    (1)登录我使用了cas,它是一个SSO框架,采用票据验证机制保证了,认证的安全。
    (2)受权我采用了shiro框架与cas无缝整合,根据三类权限的设置,保证了菜单、按钮、数据的精细控制
    (3)加密包括对HTTP头的加密(SSL),对关键业务数据的加密(AES、SHA1)

  2. 下降信息流的复杂性,最核心的是如何梳理,如何切分业务,模块之间如何互相调用。
    (1)梳理和切分业务其实更多的是经验问题,但有个通用的大原则,高内聚;也就是把关联性极高的功能放在一块儿,而对外暴露必要的接口供调用便可。其中还要考虑到一些基础数据的通用化设计。好比:组织信息、职员信息、主数据、数据字典等,单独设计并对外提供有双层缓存的接口。(其中也要考虑到缓存的更新策略)
    (2)模块间我用Maven父子项目作了划分,也为直接的接口调用和REST风格的API调用作了不一样方式的设计

  3. 如何提升开发效率,应该是咱们认真思考的话题。由于这真的很重要。若是处理得当甚至会节省30%-40%的研发时间。
    (1)代码自动生成工具:我研发了一套能够自动生成Controller、Service、Dao、Model以及全部配置及注解的工具。当前这是基于我指定的代码规范。只须要修改两到三个配置项,便可一键在项目下生成咱们所需的代码。原本至少要编写半小时的代码,如今只须要10秒钟。
    (2)可复用的工具包:十几年积累的全部工具类可提供快速的静态调用方式
    (3)抽丝剥茧,独立的功能设计:不少经常使用的第三方组件或技术的处理方式,抽象出来,加以复用。好比:线程、Redis、JMS、Socket、Json、Groovy、Mongo等。
    (4)多功能的AOP处理:基本思路是经过AOP及自定义注解灵活加入各类辅助处理功能。好比:方法缓存、自动set基础字段值、日志处理、数据权限控制等。
    (5)必要的通用功能:经过Spring提供的技术,实现异常处理、类型转换、数据验证、API请求拦截等各类处理要求。

  4. 可配置可扩展其实提及来简单作起来难。可能不少软件都是这么宣传的,但真正作到的并很少。其实我认为主要作到以下几点就能够了:
    (1)字段的可扩展,便可以经过配置的方式增长辅助字段,而且能实现1对1结构,和1对多结构的两种方式。
    (2)流程的灵活处理。软件每每设计上会固定某一主流程,只要设计上让这一流程的组织不固定,而相对松散的实现便可。
    (3)功能性模块的高度可配:好比权限系统、报表系统、工做流、数据字典

  5. 最后一个是有关下降学习成本和维护成本的问题。我以为这更可能是由于要匹配开源的要求,开源的使用者多数是我的或小团体,这对于普及一款开源产品显得尤其重要。怎么作呢?
    (1)用最普及的技术、最少的技术种类、实现更多的需求。
    (2)提供最简单的配置文档以实现程序部署。

对将来的考虑

为了考虑单体需求的激增,不得不该对高并发以及高可用的情景。因此如今技术选择以及底层搭建时就必定要有所考量。当前框架必定要能够快速引入新技术并能够高效整合。我认为Springboot必定是Java语言当下是最优的选择,也为SpringCloud的升级作了足够准备。

固然其中还有不少要考虑的内容,好比:负载均衡、消息队列、数据总线、读写分离、异步并发、降级限流等。在此不展开讨论,若是有兴趣可与开发者直接沟通。

后记

今天的日志写的比较长,但尚未包括不少中间件的优化和配置说明,为了给开源软件的使用者简化他们的部署工做,我会在后面附加一个技术补充文章。

但愿您读完本文能够帮助笔者进入【码云】或【GitHub】点点星标。感谢你们的支持!

相关文章
相关标签/搜索