ARTS 挑战打卡第十三周(200803-200809)
Algorthm
https://leetcode.com/problems/minimum-absolute-difference-in-bst/
https://leetcode.com/problems/minimum-distance-between-bst-nodes/
这两题的解法是一样的,题目要求找出任意两节点差值的最小绝对值,用中序遍历,出来的顺序是升序的,同时保存前一个节点,计算两个节点间的差值,直到找出最小的。
Review
作者介绍了自己在构建支付系统过程中学到的分布式架构概念,文章里面介绍的概念都是在以前学到过的,比较特别的是每一个概念介绍完了之后都会有一段简单的概括说明构建支付系统时为什么这些概念如此重要。
总结一下几个概念:
SLA:service-level agreement。服务级别协议,是服务提供商与客户之间定义的约定。最常见的指标有:Availability(可用性)、Accuracy(准确性)、Capacity(系统容量)、Latency(延迟)。是衡量一个大型分布式系统是否“健康”的常见方法。
为什么重要:SLA可用于定义系统中的标准,如果需要做一些妥协时可以参考这份标准。
垂直扩展和水平扩展
水平扩展就是加机器,增大系统容量
垂直扩展就是提升单台服务器的性能
为什么重要:系统扩展有利于系统的灵活性
一致性(Consistency)
一致性的级别有强一致性、弱一致性和最终一致性,具体使用什么级别的一致性,还是由业务的具体需求去决定的。
为什么重要:系统中的数据必须尽可能保持一致,否则会出现混乱的情况。
数据持久化(Data Durability)
数据持久化意味着,一旦数据被保存了,数据将一直有效。
为什么重要:在大部分系统里,数据是不能丢失的。
Message Persistence and Durability
Persistence和Durability的区别:
Persistence指的是如果服务突然挂了,服务重启后,消息数据还在,理解为持久性
Durability通常是在消息队列里面的概念,指的是如果消息已经被订阅了,如果消息已经发出,即使队列服务离线了,重新在线后数据依然存在。
为什么重要:消息的数据也不能丢,因为业务需要依赖这些消息通知来处理。需要保证消息必达。
幂等(Idempotency)
为什么重要:避免二次扣费或者二次退款
分片和法定人数(Sharding and Quorum)
当数据太多时就需要做分片来保存更多的数据,为了保证操作能一致地执行,需要数据分片间达到共识。
为什么重要:避免未达到共识而出现数据不一致
演员模式(The Actor Model)
是一种并发运算上的模型。“演员”是一种程序上的抽象概念,被视为并发运算的基本单元:当一个演员接收到一则消息,它可以做出一些决策、创建更多的演员、发送更多的消息、决定要如何回答接下来的消息。演员可以修改它们自己的私有状态,但是只能通过消息间接的相互影响(避免了基于锁的同步)。
为什么重要:根据分布式系统标准来走,避免重复造轮子。
响应式架构(Reactive Architecture)
为什么重要:在分布式系统中表现良好,参考前人经验。
Tip
TCP/IP、HTTP、Socket、Websocket的区别
TCP/IP 协议,是网络七层协议的第四层,本身没有长连接或短连接的区别;
HTTP 是基于 TCP 协议之上的「短连接」应用层协议,它的出现极大简化了网络应用的实现门槛,丰富了应用;
Socket 是操作系统内置的一套操作 TCP/IP 协议的网络(套接字)的方法;
Websocket 是跟 HTTP 对应的,基于 TCP 协议之上的「长连接」协议。
Share
分享文章:Java项目如何分层
原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
版权声明: 本文为 InfoQ 作者【老胡爱分享】的原创文章。
原文链接:【http://xie.infoq.cn/article/bed36055ecebcb2f658ef22de】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论