高可用

API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd API 网关出现的原因

孤街浪徒 提交于 2020-02-04 04:11:00
API网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd http://www.infoq.com/cn/articles/comparing-api-gateway-performances API 网关性能比较:NGINX vs. ZUUL vs. Spring Cloud Gateway vs. Linkerd 麦克周 2018 年 4 月 15 日 话题: 语言 & 开发 架构 前几天拜读了 OpsGenie 公司(一家致力于 Dev & Ops 的公司)的资深工程师 Turgay Çelik 博士写的一篇文章(链接在文末),文中介绍了他们最初也是采用 Nginx 作为单体应用的网关,后来接触到微服务架构后开始逐渐采用了其他组件。 我对于所做的工作或者感兴趣的技术,喜欢刨根问底,所以当读一篇文章时发现没有看到我想要看到的设计思想,我就会四处搜集资料,此外这篇文章涉及了我正在捣鼓的 Spring Cloud,所以我就决定写一篇文章,争取能从设计思路上解释为什么会有这样的性能差异。 技术介绍 文中针对 Nginx、ZUUL、Spring Cloud、Linkerd 等技术进行了对比(其实还有 Envoy 和 UnderTow 也是属于可选的 API 网关,本文不予涉及),那我就分别进行介绍,当然,首先得介绍

RabbitMQ 如何保证消息不丢失?

假如想象 提交于 2020-02-04 01:52:32
RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性。 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知名互联网产品的产线中使用。 1.消息持久化 2.ACK确认机制 3.设置集群镜像模式 4.消息补偿机制 第一种:消息持久化 RabbitMQ 的消息默认存放在内存上面,如果不特别声明设置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外crash掉,消息就会丢失。 所以就要对消息进行持久化处理。如何持久化,下面具体说明下: 要想做到消息持久化,必须满足以下三个条件,缺一不可。 1) Exchange 设置持久化 2)Queue 设置持久化 3)Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息 第二种:ACK确认机制 多个消费者同时收取消息,比如消息接收到一半的时候,一个消费者死掉了(逻辑复杂时间太长,超时了或者消费被停机或者网络断开链接),如何保证消息不丢? 这个使用就要使用Message acknowledgment 机制,就是消费端消费完成要通知服务端,服务端才把消息从内存删除。 这样就解决了,及时一个消费者出了问题,没有同步消息给服务端,还有其他的消费端去消费,保证了消息不丢的case。 第三种:设置集群镜像模式

Redis 读写分离

巧了我就是萌 提交于 2020-02-04 00:38:29
Redis 读写分离的实现非常简单,就是启动两个实例,一个负责读(称之为:读实例),一个负责写(称之为:写实例),读实例复制写实例的数据。 这里我以 Windows 环境下举例,Linux 环境的网上案例更多,它们的思想是一样的。 首先,准备两份一模一样的 Redis 程序,这是 Windows 环境下的目录,都是免安装的,拿来即用。 第一个写实例,我们直接用命令启动,这里就不演示了,默认的IP和端口号是:127.0.0.1 和 6379。 第二个读实例,我们就不能用 6379 了,我们换一个用 6380,所以,我们需要修改配置文件,同时,我们需要读实例去监听写实例,所以也要修改这部分内容,改起来特别简单。 修改默认端口号 指定需要复制的主服务器 修改完以后,我们启动读实例,在写实例上我们 set 一个值,从读实例上我们就可以 get 到这个数据,这样就实现了读写分离。 Redis 读写分离是怎么做数据同步的? 进行复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称作“数据库状态一致”。 Redis 有两种持久化数据的方法。一种是:全量持久化(RDB);另一种是:增量持久化(AOF)。 简单的形容:全量持久化就是把数据完完全全的复制一遍;增量持久化就是把本次和上次数据进行对比,有差别的地方复制一遍,旧数据+更改数据=现在的数据 Redis 2.8

LVS负载均衡群集(三种工作模式原理详解)

血红的双手。 提交于 2020-02-03 15:42:24
LVS负载均衡群集(三种工作模式原理详解) 一、前言 ​ 在互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。所以我们需要通过一些方法来解决这样的瓶颈。 ​ 最简单的方法就是使用价格昂贵的大、小型的主机;但这样在大多数企业中显然是不可取或者说不现实的。那么我们就需要通过多个普通服务器构建服务器群集。 二、相关概念概述 2.1何为LVS? ​ LVS——Linux Virtual Server,即Linux虚拟服务器(虚拟主机、共享主机),虚拟主机在这里就不再赘述了,相信大家都明白。 ​ 而LVS是一个虚拟的服务器集群系统,其实现的是一个高性能、高可用的服务器。目前LVS已经被集成到Linux内核模块中。 2.2LVS的构成 ①从物理层面上讲,LVS的主要组成: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务

20200202 ActiveMQ 10. ActiveMQ多节点集群

China☆狼群 提交于 2020-02-02 09:42:51
ActiveMQ 10. ActiveMQ多节点集群 10.1. 简介 面试题: 引入消息中间件后如何保证其高可用 实现方式 :基于 ZooKeeper 和 LevelDB 搭建 ActiveMQ 集群。集群仅提供主备方式的高可用集群功能,避免单点故障。 集群方案 : 基于shareFileSystem共享文件系统(KahaDB) 基于JDBC 基于可复制的LevelDB LevelDB,5.6版本之后推出了LecelDB的持久化引擎,它使用了自定义的索引代替常用的BTree索引,其持久化性能高于KahaDB,虽然默认的持久化方式还是KahaDB,但是LevelDB可能会是趋势。 在5.9版本还提供了基于LevelDB和Zookeeper的数据复制方式,作为Master-Slave方式的首选数据复制方案。 10.2. zookeeper+replicated-leveldb-store的主从集群 10.2.1. 简介 从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Masster-Slave方式.,增加了基于Zookeeper+LevelDB的Master-Slave实现方式,从5.9版本后也是官网的推荐。 基于Zookeeper和LevelDB搭建ActiveMQ集群,集群仅提供主备方式的高可用集群功能,避免单点故障. 官网信息 10.2.2. 原理说明

阿里云重磅发布RDS for SQL Server AlwaysOn集群版

删除回忆录丶 提交于 2020-02-01 05:23:18
2018年双十一刚过,阿里云数据库发布RDS for SQL Server AlwaysOn集群版,这是业界除微软云SQL Database外,首家云计算公司基于SQL Server最新AlwaysOn核心技术实现的数据库集群版,并且是经过双十一检验的商业化版本。 全形态的产品集合 纵观整个RDS for SQL Server的产品迭代图,AlwaysOn集群版的上线标志这SQL Server数据库在阿里云RDS平台的全面覆盖,阿里云数据库实现了针对企业客户不同阶段的产品体系的匹配。 基础版针对可用性要求不高的业务,并且成本是首要关注选项的客户,如初创企业,是最优选择。WEB版价格甚至比自建还要低,却能获得RDS的运维管理等多项服务,性价比最高。 随着业务的发展,关键业务的可用性要求变高,甚至要求7X24小时的不间断服务,RDS for SQL Server 高可用版基于微软Mirror技术实现,满足此类业务需求。此外,针对企业级客户特性,在高可用版中开放了大量高级特性,如复制模式设置,用户可以根据需求设置主备节点复制模式可实现业务的高可靠或者高性能。此外高可用版本支持Linked Server,实现在RDS中访问其他RDS甚至自建数据库。特别地,在高可用版本中,开放了变更数据捕获(CDC,Change Data Capture)技术,客户可根据CDC提供的能力,同步数据库的变化

大型互联网系统的特点

一世执手 提交于 2020-01-31 03:41:47
1.高并发和大流量 大型互联网需要面对高并发的访问用户,比如在天猫“双11”的时候,一分钟之内,有超过一千万的独立用户访问整个天猫系统,大规模的并发用户访问会对系统的处理能力造成巨大的冲击,系统必须要有足够强的处理能力才能够满足。同时有这么多用户来访问,产生了巨大的访问流量,对系统的抗压能力形成了考验。 高可用 大型互联网系统必须要 7×24 小时不间断地提供服务,和传统软件系统不同,银行或者是电信甚至零售业,它们都有下班时间,下了班以后可以对系统进行停机维护和升级发布,但是互联网没有下班时间,所以一直要保持高可用,7×24 小时永不间断。为了保证系统的高可用,必须要进行特别的系统架构设计。 海量的数据存储 因为互联网需要满足大量的用户使用,所以这些用户会产生很多的数据,需要对这些数据进行重组和管理。除了用户提交的数据,互联网还会采集很多其它的数据,包括一些用户行为的数据、第三方的数据以及网络爬虫获取的数据,通过大数据技术对这些数据做进一步分析,对用户进行更精准的营销和服务,以发现新的业务增长点。 用户分布广泛,网络情况复杂 互联网是为全球用户提供服务的,用户分布范围广,各地的网络情况千差万别,为了使所有用户能够得到统一的良好的体验,需要对系统架构进行相关的设计。 安全环境恶劣 因为互联网是开放的,所以互联网站很容易就会受到攻击。 需求变化快,发布频繁 和传统的软件版本发布频率比

haproxy高可用代理

坚强是说给别人听的谎言 提交于 2020-01-30 02:36:47
haproxy高可用代理 文章目录 haproxy高可用代理 1.haproxy简介 2.haproxy高可用代理的实现 1.haproxy简介 HAProxy 是一个使用C语言编写的自由及开放源代码软件[1],其提供 高可用性 、 负载均衡 ,以及基于 TCP 和 HTTP 的应用程序 代理 。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的 并发连接 。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。 HAProxy实现了一种** 事件驱动 **, 单一进程 模型,此模型支持非常大的并发连接数。 多进程 或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。 事件驱动模型 因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。 包括 GitHub 、 Bitbucket 、Stack Overflow、 Reddit 、 Tumblr 、 Twitter [5][6]和 Tuenti 在内的知名网站

etcd

一个人想着一个人 提交于 2020-01-30 01:00:03
随着CoreOS和Kubernetes等项目在开源社区日益火热,它们项目中都用到的etcd组件作为一个 高可用、强一致性的服务发现存储仓库 ,渐渐为开发人员所关注。在云计算时代,如何让服务快速透明地接入到计算集群中,如何让共享配置信息快速被集群中的所有机器发现,更为重要的是,如何构建这样一套高可用、安全、易于部署以及响应快速的服务集群,已经成为了迫切需要解决的问题。etcd为解决这类问题带来了福音,本文将从etcd的应用场景开始,深入解读etcd的实现方式,以供开发者们更为充分地享用etcd所带来的便利。 etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,側重于: 简单 :支持 curl 方式的用户 API (HTTP+JSON) 安全 :可选 SSL client证书认证 高速 :单实例可达每秒 1000 次写操作 可靠 :使用 Raft 实现分布式 Etcd is written in Go and uses the raft consensus algorithm to manage a highly-available replicated log. 经典应用场景 要问etcd是什么?很多人第一反应可能是一个键值存储仓库,却没有重视官方定义的后半句,用于 配置共享和服务发现 。

请谈谈写入消息中间件的数据,如何保证不丢失?【石杉的架构笔记】

我的未来我决定 提交于 2020-01-29 16:40:23
面试官:请谈谈写入消息中间件的数据,如何保证不丢失?【石杉的架构笔记】 欢迎关注个人公众号:石杉的架构笔记(ID:shishan100) 周一至周五早8点半!精品技术文章准时送上! 精品学习资料获取通道,参见文末 目录 1、背景引入 2、Kafka分布式存储架构 3、Kafka高可用架构 4、画图复现Kafka的写入数据丢失问题 5、Kafka的ISR机制是什么? 6、Kafka写入的数据如何保证不丢失? 7、总结 (1)背景引入 这篇文章,给大家聊一下写入Kafka的数据该如何保证其不丢失? 看过之前的文章面试官:消息中间件如何实现每秒几十万的高并发写入?的同学,应该都知道写入Kafka的数据是会落地写入磁盘的。 我们暂且不考虑写磁盘的具体过程,先大致看看下面的图,这代表了Kafka的核心架构原理。 (2)Kafka分布式存储架构 那么现在问题来了,如果每天产生几十TB的数据,难道都写一台机器的磁盘上吗?这明显是不靠谱的啊! 所以说,这里就得考虑数据的分布式存储了,其实关于消息中间件的分布式存储以及高可用架构,之前的一篇文章面试一线互联网大厂?那这道题目你必须得会!也分析过了,但是这里,我们结合Kafka的具体情况来说说。 在Kafka里面,有一个核心的概念叫做“Topic”,这个topic你就姑且认为是一个数据集合吧。 举个例子