微服务的发展

微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。

微服务落地存在的问题

虽然微服务现在如火如荼,但对其实践其实仍处于探索阶段。很多中小型互联网公司,鉴于经验、技术实力等问题,微服务落地比较困难。

如著名架构师Chris Richardson所言,目前存在的主要困难有如下几方面:

  • 单体应用拆分为分布式系统后,进程间的通讯机制和故障处理措施变的更加复杂。
  • 系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。
  • 微服务数量众多,其测试、部署、监控等都变的更加困难。

随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如springcloud可以非常好的支持restful调用,dubbo可以支持多种通讯协议。关注公众号码猿技术专栏获取更多面试资源。

对于第三个问题,随着docker、devops技术的发展以及各公有云paas平台自动化运维工具的推出,微服务的测试、部署与运维会变得越来越容易。

而对于第二个问题,现在还没有通用方案很好的解决微服务产生的事务问题。分布式事务已经成为微服务落地最大的阻碍,也是最具挑战性的一个技术难题。

ACID

  • 原子性(Atomicity): 一个事务的所有系列操作步骤被看成是一个动作,所有的步骤要么全部完成要么一个也不会完成,如果事务过程中任何一点失败,将要被改变的数据库记录就不会被真正被改变。
  • 一致性(Consistency): 数据库的约束 级联和触发机制Trigger都必须满足事务的一致性。也就是说,通过各种途径包括外键约束等任何写入数据库的数据都是有效的,不能发生表与表之间存在外键约束,但是有数据却违背这种约束性。所有改变数据库数据的动作事务必须完成,没有事务会创建一个无效数据状态,这是不同于CAP理论的一致性"consistency".
  • 隔离性(Isolation): 主要用于实现并发控制, 隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务。
  • 持久性(Durability): 一旦一个事务被提交,它应该持久保存,不会因为和其他操作冲突而取消这个事务。很多人认为这意味着事务是持久在磁盘上,但是规范没有特别定义这点。

一致性理论

分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的 ACID 是无法奢望的。

另外,业界著名的 CAP 理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。

两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但 2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师 Dan Pritchett 提出了 BASE 理论,用于解决大规模分布式系统下的数据一致性问题。关注公众号码猿技术专栏获取更多面试资源。

BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。

CAP 理论

在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)3 个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。

  • 一致性:分布式环境下,多个节点的数据是否强一致。
  • 可用性:分布式服务能一直保证可用状态。当用户发出一个请求后,服务能在有限时间内返回结果。
  • 分区容忍性:特指对网络分区的容忍性。

举例:Cassandra、Dynamo 等,默认优先选择 AP,弱化 C;HBase、MongoDB 等,默认优先选择 CP,弱化 A。

BASE 理论

核心思想:

  • 基本可用( Basically Available):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用;
  • 软状态( Soft state):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性;
  • 最终一致性( Eventual consistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态;
  • 原子性(A)与持久性(D)必须根本保障;
  • 为了可用性、性能与降级服务的需要,只有降低一致性( C ) 与 隔离性( I ) 的要求;
  • 酸碱平衡(ACID-BASE Balance);

BASE 是对 CAP 中 AP 的一个扩展

一致性模型

数据的一致性模型可以分成以下三类:

  • 强一致性:数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。
  • 弱一致性:数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。
  • 最终一致性:弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。

分布式系统数据的强一致性、弱一致性和最终一致性可以通过 Quorum NRW 算法分析。

本地事务

  • 在单个数据库的本地并且限制在单个进程内的事务
  • 本地事务不涉及多个数据来源

分布式事务典型方案

  • 两阶段提交(2PC, Two Phase Commit)方案;
  • 本地消息表 (eBay 事件队列方案);
  • TCC 补偿模式;

分类:

  • 两阶段型
  • 补偿型
  • 异步确保型
  • 最大努力通知型

服务模式:

  • 可查询操作
  • 幂等操作
  • TCC操作
  • 可补偿操作

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

资料领取方式:戳这里

学习笔记以及面试真题解析

mg-ogOPi3yV-1624514804777)]

资料领取方式:戳这里

学习笔记以及面试真题解析

java属于什么行业,吐血整理相关推荐

  1. Java学习之路吐血整理技术书从入门到进阶最全50+本(珍藏版)

    本博文系转载:原博地址:https://blog.csdn.net/qq_43336600/article/details/83537307 重要:注:原博整理的资源是加密资源,所以我在进行转载时已经 ...

  2. 南通java培训地点,吐血整理

    前言 不管是学生还是已经工作的人,我想彼此都有一个相同的梦想:进大厂! 眼看着2021年就过去一半了,那么如何才能在后半年弯道超车,进入梦寐以求的大厂呢 首先你要清楚,现在无论是大厂还是小公司,面试考 ...

  3. 全网最全性能优化总结!!(冰河吐血整理,建议收藏)

    大家好,我是冰河~~ 随着互联网的高速发展,互联网行业已经从IT时代慢慢步入到DT时代.对于Java程序员的要求越来越高,只是单纯的掌握CRUD以不足以胜任互联网公司的相关职位,大量招聘岗位显示:如果 ...

  4. 《吐血整理》顶级大佬学习方法

    你知道的越多,你不知道的越多 点赞再看,养成习惯 正文 实践是检验真理的唯一标准,这句话大家一定要记住,多实践,我最开始学C语言,发现书本看了之后自己觉得自己无敌了,一去写代码,异常满天飞,指针都不知 ...

  5. [转]《吐血整理》系列-顶级程序员工具集

    你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图.个人联系方式,欢迎Star和指教 前言 这期 ...

  6. 吐血整理!顶级程序员的百宝箱来咯!| 原力计划

    作者 | 敖丶丙 责编 | Elle 出品 | CSDN 博客 你知道的越多,你不知道的越多 因为读者很多还是学生,还有很多应届生,对一个需求的研发流程都不是很熟悉,还有可能对于以后自己需要使用到的工 ...

  7. python在线编程免费课程-吐血整理!程序员最爱的13个免费Python课程

    原标题:吐血整理!程序员最爱的13个免费Python课程 图片来源:Jefferson Santos/Unsplash Python如今无疑是全球最受欢迎的编程语言.它最大的好处,就是让越来越多的人通 ...

  8. python基础教程第三版豆瓣-数据结构与算法必读书单吐血整理推荐【附网盘链接】...

    前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...

  9. 《吐血整理》顶级程序员工具集

    前言 这期是被人才群交流里,还有很多之前网友评论强行顶出来的一期,就是让我介绍自己常用的一些工具给他们安利一下,我一听很高兴呀,帅丙我这么乐于奉献的人是吧. 主要是能水一篇文章就很开心,不过写下来发现 ...

  10. 【干货收藏】统计分析/机器学习吐血整理最强指南

    http://mp.weixin.qq.com/s?__biz=MzAxNzc3NDA3OA==&mid=2651304431&idx=1&sn=4e82688613ecc6a ...

最新文章

  1. 乐高机器人教室布置图片大全_全国青少年机器人技术等级考试(上海宝山站)顺利举行...
  2. 努力的孩子运气不会太差,跌宕的人生定当更加精彩
  3. 【BZOJ】1681: [Usaco2005 Mar]Checking an Alibi 不在场的证明(spfa)
  4. CC2540 串口0 通道2配置
  5. python安装jupyterlab_超级详细 centos7 安装 jupyter lab
  6. urllib库的学习-发起请求urlopen-下载资源urlretrleve
  7. couldn't find libweibosdkcore.so
  8. [swift] LeetCode 338. Counting Bits
  9. windows-DOS命令查看DirectX组件版本和软硬件信息版本
  10. asp.net MVC4, Ninject auto-mating
  11. 大数据时代的可扩展性数据库集群技术
  12. 基于互联云及多云的云化基础设施算力调度
  13. python脚本开头怎么写_浅谈Python脚本开头及导包注释自动添加方法
  14. vue3实现微信公众号一次性订阅消息+ios和Android的63002 config:invalid signature问题
  15. 安全和运维工具脑图v1.0
  16. win10批量修改文件扩展名
  17. 网站运营服务器宽带成本,网站运营的成本
  18. 2022年重新启航规划
  19. 手机屏幕坏了怎么把数据导出来_手机屏幕密码忘了怎么办?这个方法轻松解除手机屏幕密码...
  20. android:几种常见的Adapter介绍

热门文章

  1. python 线型_CCF 202006-1 线性分类器 python
  2. android 系统挂载ext4格式U盘,macOS 系统下格式化 U 盘为 ext4 格式
  3. mysql中字典值怎么添加_插入Python字典中的值,包括MySQL的键
  4. 里bl2和bl3为什么分开_英国的水池为什么有两个水龙头?为什么英国有独立的冷热水龙头?...
  5. 基于java的网上花店销售系统_基于web的花店销售系统的设计与实现
  6. 金融项目app服务器配置,云在金融的应用
  7. java provider_Java SPI(Service Provider Interface)
  8. mysql 更新日的数据类型_[每日更新-MySQL基础]5.常用的数据类型-整数和字符串
  9. vs2019 缺android sdk,VS2019由于缺少NuGet Microsoft.NET.Sdk.Functions程序包而无法加载项目,但也无法添加此程序包(示例代码)...
  10. ubuntu16.04编译boost for Android(boost 1.65)