CAP(一致性、可用性、分区容错性)是没法三者均做到,最多能实现两个。在系统搭建是,这里系统搭建探讨优先考虑几个点,由高到低为安全性、稳定性、高吞吐量(系统方案的讨论在“关键方案设计”)
其实在一个框架的技术选型根据实际使用业务场景来决定的,还有通过多个技术比对优选技术类型,比对的方式我当时个人能力有限,充分利用自己行业知识和咨询身边人力资源以及查询行业论文,熟话说我不能成为巨人,但是站在巨人的肩膀上也能看到一定高度。
这里主要讲前后端和移动端,前端vue、后端java、移动端android WebView和h5。 下面来简介如何简单技术,具体在后面方案里更多描述
前端
前端基础框架使用vue,页面渲染PC端element-ui和移动端VUX。我们最好对element-ui进行二次型封装。定好开发规范,推荐使用eslint约束和typeScript,开发工具用vs code和工具相关配置。以前个人搭建设置为如下
vs code:
{
"files.autoSave": "off",
"workbench.startupEditor": "welcomePage",
"vetur.validation.template": false,
"update.channel": "none",
"editor.formatOnSave": false,
"editor.tabSize": 2,
"editor.fontSize": 16,
"editor.detectIndentation": false,
"vetur.format.defaultFormatter.js": "vscode-typescript",
"vetur.format.defaultFormatter.html": "js-beautify-html"
}
eslint设计规范如下:
module.exports = {
//此项是用来告诉eslint找当前配置文件不能往父级查找
root: true,
globals: {
http: true,
$: true,
Swiper: true
},
parser: 'babel-eslint',
//此项是用来指定javaScript语言类型和风格,sourceType用来指定js导入的方式,默认是script,此处设置为module,指某块导入方式
parserOptions: {
ecmaVersion: 6,
sourceType: 'module'
},
//此项指定环境的全局变量,下面的配置指定为浏览器环境
env: {
browser: true,
node: true
},
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
// 此项是用来配置标准的js风格,就是说写代码的时候要规范的写,如果你使用vs-code我觉得应该可以避免出错
extends: 'standard',
// required to lint *.vue files
// 此项是用来提供插件的,插件名称省略了eslint-plugin-,下面这个配置是用来规范html的
plugins: [
'html'
],
// add your custom rules here
// 下面这些rules是用来设置从插件来的规范代码的规则,使用必须去掉前缀eslint-plugin-
// 主要有如下的设置规则,可以设置字符串也可以设置数字,两者效果一致
// 'off' -> 0 关闭规则
// 'warn' -> 1 开启警告规则
//'error' -> 2 开启错误规则
// 了解了上面这些,下面这些代码相信也看的明白了
rules: {
// allow async-await
'generator-star-spacing': 'off',
// 回调
'standard/no-callback-literal': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// 强制在 function的左括号之前使用一致的空格
'space-before-function-paren': 0
}
}
后端java
关注几个关键字:java8、jvm调优和设计,maven、git、阿里巴巴规约(若要积分,找我给)、spring boot/cloud基础框架(sofa或者spring cloud alibaba)、docker或者linux部署容器。我们Java版本用jdk8+,推荐使用apache开源码和阿里巴巴规约,使用开发工具ide,安装阿里巴巴规约插件。构建工具用maven,同时搭建自己maven构件库。使用版本控制工具为git或者gitlab。
移动端WebView和h5
其实对于金融行业来说移动端有更好的互联网产品落地,比如mpass,这里只是简单讲解,大家可以编写WebView实现和前端h5页面实现js交互,h5可以用VUX.
这里只是技术简介,不做细谈,此外,搭建技术方案时,不是一上来就什么RPC或者什么Redis集群缓存,这是错误做法。我们每一个架构都是居于业务驱动而搭建的,也就设计DDD设计理念。建议采用的基础架构:技术架构spring boot、数据库持久层架构mybatis、数据库mysql分库分表(水平拆分、垂直拆分)、方案设计(visio&UML&ppt案例架构设计、power design数据库设计、axure原型设计)、接口调试工具(swagger-ui和postman)。下面是个人以前搭建系统的技术选型,黑色是个人采用技术
微服务架构RPC:spring cloud、spring cloud alibaba、dubbo,个人以前用spring cloud,后来流行了spring cloud alibaba
监控: Cat、Zipkin、Pinpoint、SkyWalking
注册中心:consul、zookeeper、eurake,以前据行业说建议用consul,后来中国闭源。
配置中心:apollo、nacos、spring cloud config,动态配置
缓存工具:redis或者memcache,可以结合spring session使用
分布式事务:2PC、TCC理念,redis实现事务,MQ实现异步,zookeeper方案或者数据库ACID特性。
限流和熔断:Hystrix熔断,通过sentinel限流
API网关调度:spring cloud gateway还有个人编写的网关……
数据传输:采用json传输,Jackson(ObjectMapper)和gson以及DTO,VO,VO,PO理念
持久层访问:mybatis
消息队列:RabbitMQ、RocketMQ、ActiveMQ、Kafka、IBMMQ,但是这里建议用RocketMQ
结合上面技术选型完后,那就是编写结构设计图楼,主要如下
关键方案设计是居于DDD领域驱动设计,其实就是把大方案拆分成小方案,各自独立完成,小方案再合并方案,最终实现大方案,下面需要考虑的点(个人)
更多关注敬请期待。希望有空再写每个技术点的使用教程!
过去的工作笔记:
1、概述
安全性、稳定性、apache和互联网产品落地案例
使用技术
语言、微服务架构、日志监控、监控、RPC框架、配置中心、注册中心、
分布式事务、缓存工具、分布式事务、限流和熔断、API网关调度、数据传输
swagger-ui和postman
构建工具、迭代工具、部署工具(Docker和linux)
开发工具
设计理论:DDD
2、总体架构设计
逻辑架构
系统集成架构
3、关键方案设计
高并发查询
无会话机制
日志规范(日志脱敏、链路跟踪)
监控平台(数据埋点)
公共组件(上传下载、数据库、重复提交、幂等校验)
安全设计(跨站脚本攻击、sql攻击、跨站伪造攻击)
前后分离(动静分离)
统一报文返回,统一异常处理。
5、未来发展计划
流量控制、网关、中心模块拆分
双活方案设计
概念性描述