Spring Boot分布式系统实践【1】-架构设计
前言
【第一次尝试去写一个系列,肯定会有想不到的地方,欢迎大家留言指正】
本系列将介绍如果从零构建一套分布式系统。同时也是对自己过去工作的一个梳理过程。
本文先整理出构建系统的主要技术选型,以及技术框架。其实在形成如下框架前,我参考了许多资料和结构,也结合中小型公司的时间以及人力等因素综合。
选型
分布式调用框架
可选的有 dubbox, SpringCloud
dubboX:当当基于dubbo搞的,还在维护可以一用,推荐。
SpringCloud:整合了大量组件,相关文档比较复杂,需要针对性的进行阅读,学习成本还是需要一些。
最后选择:dubbox + zk +Spring Boot
云平台
可选方案:阿里云、腾讯云、百度云、华为云等等
大概就是比较不同平台相同配置价格,以及同一平台下不同区域间的价格等等,最终选择阿里云。
Redis
用来做缓存自建成本有点高,选择使用阿里的redis
负载均衡
可选方案: SLB, Nginx.
SLB要收钱,但是比较便宜,有保证,不会挂。 但是可配置的很少,不能根据域名做ip映射等
最后为了减少维护成本,直接使用SLB【测试环境还是要搭建nginx】
CDN
用来缓存静态文件等,七牛、阿里可选
最终选择七牛,服务好,反应及时【价格也会低一些】
身份认证
可选方案:session+redis、jwt
从扩展性来说确实jwt比较适合,但是有一个小麻烦,就是处理token的失效问题。【其实主要问题是使用token增加了代码复杂度】
最终选择session+redis
扩展:有人会说浏览器可以很好支持cookie但是移动端很难支持,其实移动端支持也不难。iOS端可以从HTTPCookieStorage读取cookie,请求时设置cookie。Android端使用Cookiejar。
权限控制
shiro:一直都在用shiro,也比较简单
数据库
oracle:使用阿里云的话自建oracle还是比较麻烦的
mysql:可以自建也可以用阿里的RDS
最终选择阿里云数据库RDS
持久层框架
常用Mybatis,那就继续用吧
部署架构图
附一张阿里的部署架构图供大家参考
完整流程图地址:https://www.processon.com/view/5b4d9b26e4b09a67416e1611
项目调用关系图
项目模块说明
service 为业务层 即服务提供者(包含 service实现及facadeService实现、Dao)
facade为接口层(只定义 接口类 与 实体类)
middle为服务中间层 (通过facade层 调用service层 )可以理解为web层与api层共用的模块
web为服务消费者,包含web页面 (通过facade层 调用service层 )
api为服务消费者,主要为客户端提供api服务 (通过facade层 调用service层 )
Spring Boot分布式系统实践【1】-架构设计的更多相关文章
- Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录
日志注解 前言 spring切面的编程,spring中事物处理.日志记录常常与pointcut相结合 * * Pointcut 是指那些方法需要被执行"AOP",是由"P ...
- Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进
前言 调试之前请先关闭Favicon配置 spring: favicon: enabled: false 不然会发现有2个请求(如果用nginx+ 浏览器调试的话) 序列化工具类[ ...
- Spring Boot分布式系统实践【2】-框架搭建
前言 技术选型已经做完,那就来搭建框架了. 首先基于mvc思想,设计这套框架也是基于此,也会设计Dao层.Service层.Controller层.视图层等,同时也要考虑到dubbo的调用原理. ...
- Spring Cloud Netflix概览和架构设计
Spring Cloud简介 Spring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- Spring Boot、微服务架构和大数据
一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...
- Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock
在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题
按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...
随机推荐
- jquery只获取自身文本节点,不获取子元素的
jQuery.text()方法时候,会把子元素的文本也获取到,以下方法可获取自身文本节点,不包括子元素 <div id="demo">只获取我<a href=&q ...
- 07flask中session及cookie的用法。
一,基本概念. 1,session的概念. session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,而session是存储在服务器.存储在服务 ...
- 关于各种工具输入参数中"-"和"--"
关于各种工具输入参数中"-"和"--" 写个随笔记录下来 一直搞不懂,为啥在使用很多工具的时候,他的参数要加的"-"数量不一样呢? 如果输入 ...
- 百度TTS的来由
#### https://home-assistant.io/components/tts.baidu/#### https://github.com/charleyzhu/HomeAssistant ...
- TypeScript 函数-重载
function attr(name:string):string; function attr(age:number):string; function attr(nameorage:any):an ...
- 检查对象是否为NULL或者为Empty
不管是在Winform开发,还是在asp.net 开发中当从一个数据源中获取数据时你总是不知道这个数据的状态,这个时候总要对她进行一次判断,不过每次进行一次判断总是要写怎么一堆代码,时间长了,总感觉不 ...
- XLua----热更新
一.xLua 环境配置 1).Xlua中 Plugin Xlua复制到 需要热更新的工程中---->Assets子目录 2).开启宏HOTFIX_ENABLE File---->bui ...
- Mesos源码分析(8): Mesos-Slave的初始化
Mesos-Slave的初始化在文件src/slave/slave.cpp里面 首先初始化资源预估器 初始化attributes 初始化hostname 初始化status ...
- 依赖注入[8]: .NET Core DI框架[服务消费]
包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServicePr ...
- Nginx限流配置
电商平台营销时候,经常会碰到的大流量问题,除了做流量分流处理,可能还要做用户黑白名单.信誉分析,进而根据用户ip信誉权重做相应的流量拦截.限制流量.Nginx自身有的请求限制模块ngx_http_li ...