浅谈分布式架构搭建-理论知识


架构师搭建架一般优先考虑的是安全性、稳定性、高吞吐量。哈哈,菜鸟的我让我装个B,回忆一下以前架构搭建

基础

理念

    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)。下面是个人以前搭建系统的技术选型,黑色是个人采用技术

微服务架构RPCspring 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

总体架构设计

结合上面技术选型完后,那就是编写结构设计图楼,主要如下

  1. 逻辑架构
  2. 系统集成架构
  3. 物理部署结构
  4. 数据库设计图
  5. 系统中心模块拆分
  6. 流量控制、网关、中心模块拆分
  7. 双活方案设计,同城双活要考虑的问题是缓存

关键案例设计

关键方案设计是居于DDD领域驱动设计,其实就是把大方案拆分成小方案,各自独立完成,小方案再合并方案,最终实现大方案,下面需要考虑的点(个人)

  1. 高并发查询(分库分表,sql优化以及用mybatis的cursor查询,游标查询关闭的,所以要获取sqlsession或者@Transational事务)
  2. 无会话机制(数据库缓存或者第三方缓存工具redis)
  3. 日志规范(日志脱敏过滤器、链路跟踪雪花算法)
  4. 监控平台(数据埋点cat)
  5. 公共组件(HandlerInterceptor拦截器统一处理上传下载、数据库选型和shardingsphere、redis重复提交、token幂等校验、sm2签名验签)
  6. 安全设计(跨站脚本攻击过滤器、Filter和statement预处理防sql攻击、跨站伪造攻击跨域校验)
  7. 前后分离(动静分离,nginx服务器,静态文件服务器)
  8. 统一报文返回
  9. 统一异常处理(ControllerAdvice)。
  10. JVM参数设置和GC算法设置
  11. 性能压测Jmeter

更多关注敬请期待。希望有空再写每个技术点的使用教程!

过去的工作笔记:

1、概述
安全性、稳定性、apache和互联网产品落地案例

使用技术
语言、微服务架构、日志监控、监控、RPC框架、配置中心、注册中心、
分布式事务、缓存工具、分布式事务、限流和熔断、API网关调度、数据传输

swagger-ui和postman
构建工具、迭代工具、部署工具(Docker和linux)

开发工具

设计理论:DDD


2、总体架构设计
逻辑架构
系统集成架构

3、关键方案设计
高并发查询
无会话机制
日志规范(日志脱敏、链路跟踪)
监控平台(数据埋点)
公共组件(上传下载、数据库、重复提交、幂等校验)
安全设计(跨站脚本攻击、sql攻击、跨站伪造攻击)
前后分离(动静分离)
统一报文返回,统一异常处理。

5、未来发展计划
流量控制、网关、中心模块拆分
双活方案设计
概念性描述

猜你喜欢

转载自blog.csdn.net/soft_z1302/article/details/111249637