2019java微服务架构2.0---学习笔记

目录

1、CAP定理

    1.1、一致性(Consistency)

    1.2、可用性(Availability)

    1.3、分区容错性(Partition tolerance)

2、BASE理论

    2.1、基本可用(Basically Available)

    2.2、软状态(Soft State)

    2.3、最终一致性(Eventual Consistency)

3、ACID和BASE的区别与联系

4、如何应对高并发

    4.1、什么是高并发

    4.2、如何提升系统的并发能力

    4.3、水平扩展分层架构图

        1、反向代理层的水平扩展

        2、站点应用层的水平扩展

        3、服务层的水平扩展

        4、数据层的水平扩展(按范围拆分)

       5、数据层的水平扩展(按哈希拆分)

5、docker compose安装maven私服、gitLab、docker镜像私服

       5.1、docker compose方式安装maven私服(Nexus)地址

       5.2、docker compose方式安装gitLab

       5.3、docker compose方式安装docker镜像私服(Harbor)

6、spring boot常用配置

    6.1、自定义Banner

    6.2、Starter POM

    6.3、关闭特定的自动配置

    6.4、默认日志配置

7、MyBatis

    7.1、MyBatis-HikariCP


1、CAP定理

    CAP理论只能满足一致性、可用性、分区容错性,这3项中的2项。

    1.1、一致性(Consistency)

        all nodes see the same data at the same time(所有节点同时看到相同的数据)
        也就是更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

    1.2、可用性(Availability)

        reads and writes always succeed(读写总是成功的)
        即服务一直可用,而且是正常响应时间。

    1.3、分区容错性(Partition tolerance)

        the system continues to operate despite arbitrary message loss or failure of part of the system(系统继续运行,尽管部分系统出现任意消息丢失或故障)
        即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

常用的两种类型系统:
    可用性系统:CP系统(金融级)
    一致性系统:AP系统

2、BASE理论

    2.1、基本可用(Basically Available)

        指分布式系统在出现故障的时候,允许损失部分可用性,保证核心可用。
            eg:定点抢购

    2.2、软状态(Soft State)

        指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。
            eg:分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。

    2.3、最终一致性(Eventual Consistency)

        指系统中的所有数据副本经过一定时间后,最终达到一致的状态。
            弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

3、ACID和BASE的区别与联系

    ACID:是传统数据库常用的设计理念,追求强一致性模型。
    BASE:支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。
        在分布式系统中,根据具体系统对一致性的要求不同,选择ACID、BASE、ACID与BASE结合使用。

4、如何应对高并发

    4.1、什么是高并发

        高并发:High Concurrenty,指通过设计保证系统能够同时并行处理很多请求。
        高并发相关常用的一些指标:响应时间(Response Time)、吞吐量(Throughput)、每秒查询率QPS(Query Per Second)、并发用户数
            1、响应时间:系统对请求作出响应的时间
                eg:系统处理HTTP请求需要200ms,这个200ms就是系统的响应时间
            2、吞吐量:单位时间内处理的请求数量。(单位时间指:年、月、日、时、分、秒)
            3、QPS:每秒响应请求数。
            4、并发用户数:同时承载正常使用系统功能的用户数量。
                eg:一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

    4.2、如何提升系统的并发能力

        主要有两种:垂直扩展(Scale Up)、水平扩展(Scale Out)
        互联网系统常用水平扩展。
        1、垂直扩展的2种方式
            1、增强单机硬件性能
            2、提升单机架构性能
                eg:用缓存来减少IO次数
        2、水平扩展    
            只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的。

    4.3、水平扩展分层架构图

        1、反向代理层的水平扩展

DNS对异构域名配置了多个解析IP,每次DNS解析请求,会轮询返回这些IP


        2、站点应用层的水平扩展

        3、服务层的水平扩展

        4、数据层的水平扩展(按范围拆分)

 

eg:user0库,存储uid范围1~1kw
    user1库,存储uid范围1kw~2kw

优点:
    1、规则简单
        service只需要判断一下uid范围就能路由到对应的存储服务
    2、数据均衡性较好
    3、比较容易扩展

        可以随时加一个uid[2kw~3kw]的数据服务
缺点:
    请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大范围的服务请求压力会更大

       5、数据层的水平扩展(按哈希拆分)

缺点:
    不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移
水平拆分与主从同步读写分离有本质的不同

5、docker compose安装maven私服、gitLab、docker镜像私服

       5.1、docker compose方式安装maven私服(Nexus)地址

    https://study.163.com/course/courseLearn.htm?courseId=1209432891#/learn/video?lessonId=1279506141&courseId=1209432891

       5.2、docker compose方式安装gitLab

    https://study.163.com/course/courseLearn.htm?courseId=1209432891#/learn/video?lessonId=1279501136&courseId=1209432891

       5.3、docker compose方式安装docker镜像私服(Harbor)

    https://study.163.com/course/courseLearn.htm?courseId=1209432891#/learn/video?lessonId=1279499169&courseId=1209432891
有业务的叫Bean,没业务的叫POJO
当servlet的并发达到1000以后会出各种问题,并且servlet是同步并阻塞的。
BIO:同步并阻塞
NIO:异步并阻塞
AIO:异步非阻塞

响应式编程:
    达到服务器主动向前端请求的效果:基于TCP协议,通过WebSocket建立长连接
    WebFlux基于Netty实现异步响应式编程

6、spring boot常用配置

    6.1、自定义Banner

        在src/main/resources目录下新建一个banner.txt,通过http://patorjk.com/software/taag网站生成字符串,将网站生成的字符串复制到banner.txt中,再次启动这个程序。

    6.2、Starter POM

        是为了简化企业级开发绝大多数场景。(就是默认的依赖的两个包:spring-boot-starter-web、spring-boot-starter-test

)
        使用对应场景的starter pom,相关的技术配置将会消除,就可以得到spring boot为我们提供的自动配置的bean。这是通过“spring-boot-test-autoconfigure“这个包完成了相关配置,从而实现了自动配置
        更多starter pom地址:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/using-boot-build-systems.html#using-boot-starter
       

    6.3、关闭特定的自动配置

可以通过@SpringBootApplication注解的exclude参数来关闭特定的自动配置
    eg:关闭数据源的自动配置:@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

    6.4、默认日志配置

    默认情况下,spring boot使用Logback作为日志框架

7、MyBatis

    7.1、HikariCP(连接池)

git代码地址:https://github.com/brettwooldridge/HikariCP

可靠性
    如果所有的都配置了connectionTimeout类似的参数为5秒钟
    HikariCP:等待5秒后,如果连接没有恢复,则抛出一个SQLExceptions异常
    C3P0:完全没有反应,没有提示、也不会在CheckoutTimeout配置的时长超时后有任何通知给调用者,等待2分钟后,终于醒来了,返回一个error
    Tomcat-jdbc:返回一个connectin,然后调用者如果利用这个无效的connection执行SQL语句,大约55秒之后终于醒来了,这时候getConnection()返回一个error,但没有等待参数配置的5秒,而是立即返回error
    BoneCP:跟tomcat的处理方法一样,也是大约55秒之后才醒来,等待5秒后,返回error

    7.2、TkMybatis

老师原文地址:https://blog.csdn.net/qq_38324424/article/details/100521432

    tk.mybatis是在MyBatis框架的基础上提供了很多工具,让开发更加高效

1、pom配置、application配置
    

2、创建通用父级接口

3、PageHelper

    是Mybatis的分页插件,支持多数据库、多数据源,可以简化数据库的分页查询操作,整合过程也非常简单。只需引入依赖即可。

4、代码生成插件mybatis-generator-maven-plugin

8、Spring Cloud Alibaba

待学习demo:视频地址:https://www.bilibili.com/video/av40924228/

文章地址:https://www.funtl.com/zh/spring-cloud-alibaba-myshop/

Spring Cloud不是框架,而是一套编程模型。
Spring Cloud提供了微服务架构的各种接口(标准),spring cloud Alibaba实现了Spring Cloud的接口
    Spring Cloud为开发人员提供了快速构建分布式系统的模式工具。
        eg:配置管理、服务发现、断路器、智能路由、微代理、控制总线
    由于spring cloud Netflix在2018年12月12日,宣布不再添加新特性,所以我们采用spring cloud Alibaba。

Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案

原文地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

参考地址:https://blog.csdn.net/star1210644725/article/details/104258330

    8.1、主要功能

    服务限流降级、服务注册与发现、分布式配置管理、消息驱动能力、阿里云对象存储、分布式任务调度

    8.2、组件

开源的:Sentinel、Nacos、RocketMQ、Dubbo、Seata

收费的:Alibaba Cloud ACM、Alibaba Cloud OSS、Alibaba Cloud SchedulerX、Alibaba Cloud SMS。

    8.3、pom配置

     8.4、创建统一的依赖管理hello-spring-cloud-alibaba-dependencies

 

 

 

 

 

 

 


    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值