-
在微服务架构中,客户端负载均衡是指负载均衡器作为客户端软件的一部分,客户端得到可用的服务实例列表然后按照特定的负载均衡策略,分发请求到不同的服务。ServiceComb内置了客户端负载均衡组件,开发者可以非常简单的使用。具体可参考:https://docs.servicecomb.io/java-chassis/zh_CN/references-handlers/loadbalance.html 本文将介绍ServiceComb与SpringCloud的Ribbon负载均衡组件协同工作,以构建微服务应用。ServiceComb已适配对应的接口和配置,用户用极简单的方法配置后即可使微服务应用具备负载均衡的能力。示例以下通过一个服务提供者provider-service和消费者consumer-service作为demo演示。provider-service会启动3个微服务实例,消费者端consumer-service使用Ribbon负载均衡调用proveder-service服务的接口。其中consumer-service在调用provider-service提供的接口时会打印出真实调用的URL ↓↓↓完整示例地址:https://github.com/lisenwork/servicecomb-demo/tree/master/servicecomb-ribbon 预置条件: 示例应先安装启动服务与注册中心ServiceCenter,详细步骤请参考官网↓↓↓http://servicecomb.apache.org/cn/users/setup-environment/#%E8%BF%90%E8%A1%8Cservice-center 一开发服务消费者comsumer-service只需三步即可开发拥有负载均衡能力的微服务步骤如下:01添加依赖新建pom文件,引入如下依赖。完整pom文件内容请参考↓↓↓https://github.com/lisenwork/servicecomb-demo/blob/master/servicecomb-ribbon/consumer-service/pom.xml 02配置 在resources目录下新建ServiceComb配置文件microservice.yaml。配置微服务信息↓↓↓03项目入口新建启动类ConsumerApplication.java。如下图,启动类里同时实例化一个RestTemplate对象。该对象用于后面的服务间接口调用。新建ConsumerController.java。在该类的consumer方法里使用Ribbon的API动态获取服务实例,并打印出被选中的实例的真实IP地址和端口。最后调用服务实例的接口,获取结果并返回。04启动项目根目录下执行命令 mvn spring-boot:run二开发服务提供者provider-service01添加依赖新建pom文件,引入如下依赖。完整pom文件内容请参考↓↓↓https://github.com/lisenwork/servicecomb-demo/blob/master/servicecomb-ribbon/provider-service/pom.xml 02配置 在src/main/resources目录下新建microservice.yaml03项目入口新建启动类ProviderApplication.java新建ProviderController.java。只向外提供/provider接口04启动 服务提供者要启动3个微服务实例。打开microservice.yaml文件,分别修改微服务监听端口为8888,8889,8890,在项目根目录下执行3次命令 mvn spring-boot:run演示浏览器访问http://localhost:7777/consumer,重复刷新一定次数,观察控制台,会发现服务消费者会轮询调用服务提供者的三个实例。小结本文向社区读者从读者角度阐述了ServiceComb是如何支持SpringCloud Ribbon的。我们也非常欢迎爱好者们向社区提问和贡献代码。下章我们将介绍ServiceComb+SpringCloud Ribbon源码篇。如果在阅读代码时有任何疑问想交流,欢迎扫码加入进微信群。期待志同道合的朋友们加入ServiceComb的大门为你们敞开~用心做开源,不忘初衷前期阅读[学习微服务-第5天]ServiceComb+Zipkin源码解读[学习微服务-第4天]ServiceComb+Zipkin[学习微服务-第3天] ServiceComb内置高性能网关服务[每天学习微服务-源码解读] ServiceComb+SpringCloud Zuul[每天学习微服务-网关]ServiceComb+SpringCloud Zuul了解更多信息请访问官方网站http://servicecomb.apache.org/ Github代码仓库https://github.com/apache?q=ServiceComb
-
要介绍istio请求路由,我们不由得先从pilot 和 envoy开始谈起。 在服务网格中,Pilot管理和配置所有的envoy实例。在pilot中,你几乎可以配置所有的关于流量导向规则及其他故障恢复规则。而Envoy不仅会获得从pilot拿到的基本负载均衡信息,同时周期性的健康检查,也会告诉所有的envoy其他的实例现在的运行状况。负载均衡信息,及健康检查的信息可以使envoy更加智能的去分发流量。在上述的pilot结构中,不难理解,platform adapter作为平台适配器,可以使istio顺利的在任何平台下工作。Envoy Api则提供动态更新信息,服务发现及配置路由规则的功能。请求路由在istio中,envoy的存在为流入及流出的流量提供了可控和可视的基本条件。Envoy根据所维护的信息对请求流量的一方面有利于平衡各个pod的工作量,保证不会存在极端情况而是“雨露均沾”。另一方面,envoy对请求流量的分发,从使用者角度来讲是无感知的。如图中,用户通过某个地址来访问服务A,服务A的envoy实时发现了网格内存在的服务B,并且根据既定的转发规则来分发流量(1%流入pod4访问B’版本其余99%根据负载均衡信息流入pod1-pod3访问B版本)。也正是envoy挂在服务外部的这一设计,方便开发和运维人员进行故障测试,熔断以及实时监控。VirtualService & DestinationRuleVirtualserviceVirtualService中主要是定义了请求的路由规则,当某个请求满足了先前预设的路有条件,那么这个请求就会路由至预设的服务。我们看一个简单的VirtualService例子: 在这个virtualservice中,绿色范围内的host有两条内容,第一条是服务的短名称,实际上这个名称是省略后的FQDN,这里的全称应当是reviews.default.svc.cluster.local中间标红的是规则所在的namespace,而不是reviews所在的namespace。第二条则是配置给reviews组件的通过负载均衡访问的地址。黄色部分则是路由地址,其中的subset对应的是服务中的版本。DestinationRuleDestinationRule是路由后的流量访问策略,访问策略包含负载均衡算法,熔断等限制。下图是一个destinationrule的例子:黄色部分很显然是服务的两个版本。绿色部分的意义是TrafficPolicy,里面配置的是负载均衡算法设定为最小连接数,当两个主机提供服务时,会自动选择连接数最小的主机。我们也可以在这里配置连接池,TLS连接,端口级别策略,自动移除不健康主机等设置。连接池管理连接池配置给上游主机,这意味着该主机所有获取到来自envoy的链接请求,都要遵循配置好的连接池原则,这些原则既可以配在TCP层也可以配在HTTP层。所属类型描述TCPConnectionPoolSetting.TCPSettings由于HTTP和TCP的关系,这部分属性既会作用在http连接也会作用在tcp连接HTTPConnectionPoolSetting.HTTPSettings这部分是对于应用层的HTTP连接专有的配置HTTP连接池配置http1MaxPendingRequests: 到目标主机最大等待请求数,如果不设定默认是1024,这是针对http1.1设定的,对于http2因为不会将请求放入队列所以不受影响。http2MaxRequests: 对后端的最大请求数量,不设定会默认为1024、maxRequestsPerConnection: 每次连接最大的请求数,如果这个属性值设为1,那么每次连接最多发送一个请求,也就是无法保持连接。MaxRetries: 最大重试次数。TCP连接池配置MaxConnections: 最大连接数,但是只作用于http1.1也不作用于http2,因为后者只建立一次连接。ConnectionTimeOut: TCP连接超时负载均衡器配置负载均衡概述负载均衡有两种:基于负载均衡算法和基于一致性哈希。对于基于负载均衡算法的配置十分简便,只要在simpleLB配上响应的字段即可。算法字段描述ROUND_ROBIN简单的轮训算法,这也是默认的方式LEAST_CONN随机选择两个健康的主机,并且在两者中选择连接数少的一个RANDOM健康主机内随机选择PAASTHROUGH直接分发到目标地址主机基于一致性哈希的负载均衡方式可以根据HTTP header,cookie来提供soft session affinity,但是这种负载均衡方式仅支持http连接。算法字段描述httpHeaderName根据http header获得哈希httpCookie根据http cookie获得哈希useSourceIp根据IP地址获得哈希minimumRingSize哈希环中最小虚拟节点数,默认是1024负载均衡样例负载均衡策略配置十分灵活,可以针对某个服务进行配置,配置后隶属于该服务的所有pod将会按照设定的负载均衡方式进行请求的分配,除此之外,istio也允许用户进行更深一层的配置,对于服务中的版本进行负载均衡配置的。配置后符合该版本的pod 将会按照深层配置的负载均衡模式进行分配,其余的则还按服务层面的负载均衡模式进行分配。下面我们根据一个实例来看这种情况。如图所示,绿色的内容是针对服务层面设置的负载均衡方式,如果请求了ratings这个服务那么默认将会采用最小连接数这个负载均衡方式,如果请求访问这个服务需要的是v3版本这时候版本级的负载均衡方式将会覆盖服务级的负载均衡方式,这时则会使用ROUND_ROBIN的方式。不同层级的负载均衡设置可以让操作者更加细化自身的服务设计。总结本文只介绍了很小一部分istio请求路由的内容,其灵活的配置,非侵入式的设计,跨平台的支持极大地提升了开发效率,降低了测试难度。深入理解virtualservice,destinationrule等是使用istio功能的基本前提,熟练使用连接池和负载均衡配置可以在有限资源的前提下最大化的提升应用性能。
-
尊敬的华为云客户:华为云计划于2019/01/17 00:00:00,停止官网页面创建经典型ELB公网和私网实例。 并且,计划于2019/05/30 00:00:00,停止API创建经典型ELB公网和私网实例。经典型ELB实例停止创建后,1、将无法通过官网和API方式,创建经典型ELB实例,若您需要使用ELB产品,请创建增强型ELB产品。2、若已经创建经典型ELB产品,则可继续使用。3、若您需要将已创建的经典型ELB产品升级为增强型ELB产品,华为云将为您提供迁移工具,工具下载地址https://developer.huaweicloud.com/tools如您有任何问题,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!https://www.huaweicloud.com/notice/2018/20181211142110367.html
-
本文探讨如下几个问题:什么是架构属性约束和架构属性的关系有哪些架构属性各个架构属性涉及知识点什么是架构属性首先,问个很简单的问题!请看下面的Java代码:class Person { private String name; private int age; public void skill() { ...... }}请问上面的代码中:name和age被称为Person这个类的什么?skill又称为Person这个类的什么呢?name和age一般被称为字段、成员变量或属性;skill一般被称为方法,表示Person所具有的功能!我们稍微修改下代码:Architecture { private String safe; private String performance; public void func() { ......safe(安全性)和performance(性能)就是Architecture(架构)的属性!func就是架构所具有的功能!架构属性一般又称为质量属性!这些架构属性和架构功能是从哪来的呢?在之前的文章中提到过约束包含:功能性约束(这个系统要完成的功能)、非功能性约束(可用性、扩展性、容错性等)、其它约束(人员技能、法律法规、公司规定等)实际上,架构属性和架构功能是从约束而来:对「功能性约束」的决策结果就是架构功能对「非功能性约束」的决策结果就是架构属性而对「其它约束」的决策可能会同时影响到架构功能和架构属性给架构属性和架构功能下个定义:架构属性是对「非功能约束」决策后,架构所具有的特征,且受到一些其它约束的影响架构功能是对「功能约束」决策后,架构所具有的功能,且受到一些其它约束的影响以在线教育系统为例,来说明一下:这个系统需要具有在线直播的功能,完成这个功能约束后,系统即有了在线直播这个架构功能这个系统需要4个9的可用性,如果这个系统达到了这个非功能性约束,系统即有了高可用的架构属性法律法规规定,现在直播需要有《信息网络传播视听节目许可证》或《广播电视节目制作经营许可证》,如果你没有,那么你的系统就没法进行直播也就没有了直播这个功能;而如果人员技能不达标或者某些突发情况,那可能导致系统就不具备高可用这个属性,号称「能同时支持8位明星同时×××的微博」,不是又挂了吗?架构属性架构属性一般包括如下方面:性能,伸缩性,可用性,安全性,容错性,灾难恢复,可访问性,可运维,管理,灵活性,可扩展性,可维护性,国际化,本地化。还有法律法规,成本,人员等对上面架构属性的影响。下面分别讨论(由于涉及的内容很多,这里只是一个概要,详细内容后续慢慢讨论)。性能我们经常挂在嘴边的优化,绝大部分情况下指的是「性能优化」。「性能优化」的目的就是提高系统响应速度。而优化的原因就是系统响应速度不够快。一般认为,一个网页打开速度超过3s,用户就开始没有耐心了;如果超过5s,用户就要打算放弃访问了;而如果超过10s以上用户还没关闭,这个网站不是12306就是查分网站。上面指的「响应速度」主要分为系统性能和用户感知性能。这两者的区别是:系统性能指系统自身的响应,即调用一个接口,此接口多久能返回。而用户感知性能,是用户操作后到操作反馈的时间。举个简单的例子,假设一个页面完整加载完要3s,如果用户一点击就白页,3秒后再显示出来,那么用户感知性能就是3秒;而如果一点击1秒之内就加载了第一屏或者立即就有一个加载反馈,那么用户感知性能就在1s以内。虽然系统性能实际是一样的,但是用户的感知性能却不同。性能方面的知识点主要涉及各种优化:前端优化,网络优化,代码优化,数据库优化,JVM优化等等等等,提高TPS,QPS等系统性能和用户感知性能(用户体验)伸缩性如果你玩游戏的话,你肯定知道「开服」和「合服」吧?其实这就是伸缩性!简单来说,伸缩性就是:「你的系统能否能通过简单的增加部署,来应对更多的访问量」!例如:原来你的系统只有一台服务器,现在一台服务器撑不住了,你能否不修改任何代码,只增加一台一样的服务器就可以支撑更多的人来访问?相对的,反过来,如果你的用户量减少了,两台服务器浪费了,你能否直接关闭一台服务集,来节约成本?伸缩性涉及的知识点主要涉及分布式相关内容:应用集群,负载均衡,负载均衡算法,分布式事务,分库分表,拆分应用,服务化,SOA,微服务等可用性可用性可能是最基本的架构属性了。你经常听到的3个9,4个9,5个9就是指可用性的。可用性指的是:「系统能够连续多长时间正常运行?」3个9就表示系统全年可用时间占全年时间的99.9%,即不可用时间是365*24*60*60*0.1%=31536秒,大概8个多小时,好像时间还挺长的4个9就表示系统全年可用时间占全年时间的99.99%,即不可用时间是365*24*60*60*0.01%=3154秒,大概50多分钟。基本上最多只能出一次故障5个9就表示系统全年可用时间占全年时间的99.999%,即不可用时间是365*24*60*60*0.001%=315秒,大概5多分钟。基本上等于系统全年都要保证可用。一般情况下,系统故障了5分钟还不一定能定位到问题,更不要说解决问题了。可用性和伸缩性涉及知识点有些重合,因为保障可用性的方法就是「冗余」,实际就是集群和分布式:集群,多数据中心,主备切换,心跳,注册中心,负载均衡,负载均衡算法(轮询、随机、hash),容错(见容错处理)等安全性最近Facebook出现了系统漏洞,5000多万的用户数据被泄露了。之前的携程也是,不少的知名系统都出现过安全问题。安全性就是:「保障用户在使用系统的过程中,信息不会被泄露,导致个人财产受到损失,个人安全受到威胁等」安全性相关知识点包括:各种攻击防范(CSRF,SQL注入,脚本注入,DDos等),https,鉴权,授权,单点登录,加解密等容错性做系统时,我们都听说过,要把用户当傻瓜,要把操作做得尽量简单。而实际上,我们也要把用户当做破坏分子,他们不小的概率不会按照正常情况来操作你的系统。比如:电话号码里面写了字符啦,添加了各种表情啦,狂点提交按钮啦,狂刷新啦等等等等。你的系统需要应对这些。容错性就是:「系统对非正常情况(输入、输出、操作,异常数据等)的宽容程度」。你不能动不动就给个500错误,需要对可能的情况做容错处理。比如:前后端的数据检查,友好的错误提示。容错性涉及知识点:如何进行异常处理?非正常输入输出处理。网络波动,请求超时,服务挂掉,硬件问题,用户体验等灾难恢复灾难恢复和容错性比较类似,只是程度上的区别。用户输入错误这样的问题,可能只是导致这个用户的流程无法走下去。而「灾难」会影响一部分甚至所有用户都无法使用系统,从而导致可用性问题。比如:服务器宕机、机房断电、硬盘损坏、甚至地震了。你如何保证你的系统在上述情况下还能正常对外提供服务?灾难恢复涉及的知识点:线路的快速切换,负载均衡算法,硬件损坏的恢复,跨DC备份等可访问性类似让视觉障碍之类的残疾人也能使用你的软件,这个好像目前考虑得不是太多,暂不讨论。主要还是用户体验方面,只是面向的群体不同,优化的点也就不同。监测(可运维)上面说可用性,4个9时基本就要保障机器全年都要可用,为了达到这个目标,就要对系统进行监控,以期在早期发现问题,在影响系统可用性前,就将其解决。这就是监测。主要包括完善的监控视图,异常数据的提醒,日志的记录等监测涉及知识点:日志记录,日志统计,请求跟踪,机器负载监控,请求监控等,偏运维。管理如果你做过线上系统,应该会遇到过需要不停机调整系统某些参数的情况。例如:调整日志的输出级别,删除某些数据,刷新缓存。管理指:「运行时修改系统配置、刷新缓存等能力」。这里需要注意的是,要避免对线上系统的影响,比如:全量刷新了缓存,导致系统雪崩了。管理涉及知识点:需要权衡哪些配置需要在线进行调整。灵活性系统上线后,可能主要是运营人员对系统进行操作,一般运营人员不懂技术,如何提供方便的功能,能够让运营人员方便的使用系统。例如:用户下错单了,运营人员需要取消订单;敏感词审核了;屏蔽某些用户了;调整工作流流程了等等等等灵活性指:「非技术人员修改软件内部使用的业务规则的能力」。灵活性涉及知识点:确定哪些功能需要后台管理功能,及相关功能的设计。比如是否需要完善的权限体系,及运营人员如何管理权限体系。可扩展性系统开发是个持续的过程,对内项目一般会分期,一期二期三期;互联网项目会不断的根据用户反馈进行迭代。如何方便的进行迭代就是架构的可扩展性。扩展性指:「扩展软件使其可以做现在还不能做的事的能力。即添加新功能的难易程度。」扩展性涉及知识点:主要是设计方面的考量。面向对象设计、组件设计,高内聚,低耦合等。一些架构风格,例如插件风格,过滤器风格等对扩展性比较友好。其实大部分架构都支持可扩展性,只是支持的程度不同而已可维护性开发为什么要使用框架?为什么要走变更流程?为什么有各种开发流程?为什么发布代码还要提交运维申请?是为了管理项目,提高开发进度,能够跟进项目计划,确定是否出现偏差,及时进行调整。这些都是可维护性的范畴。可维护性指:「系统是否能快速的开发、测试、发布?」可维护性这个属性偏流程管理,包括编码规范,开发流程,测试流程,发布流程等国际化支持多国语言的能力。比如:很多网站分为中文站,国际站。这就需要考量,是使用相同的数据进行翻译,还是部署不同的系统等。本地化以符合最终用户文化习俗的方式展示数字、货币、日期等其它影响因素法律法规:某些行业会受到法律或监管机构的管理,需要符合法律法规。例如金融行业成本:成本不够,可能就会先降低甚至忽略某些架构属性的要求人员水平:人员水平也可能会降低或提高某些架构属性举个例子这些架构属性,就是在做系统架构时需要考虑的点。依然以在线教育系统为例:这个系统需要支持多少学员同时在线学习?能容忍多长时间的系统响应?这是「性能」系统需要连续多长时间不出问题?3个9?4个9?还是5个9?这是「可用性」如果系统出现了问题,该如何处理?如何响应?这是「系统容错」如果学员增多了,能否能方便的多部署系统来支持?反之,如果学员减少了,能否减少系统部署来节约成本?这是「伸缩性」如果要新增直播的功能,能否方便的添加?且基本不影响现有功能?这是「扩展性」系统能否防御恶意攻击?是否能保证用户的信息安全?这是「安全性」如何能以最小的花费来完成系统?这是「成本」考量目前的团队技术水平如何?这是「人员」考量系统出现问题或异常情况,是否能快速的通知相关人员?这需要完善的监控系统,这是「可运维性」系统如何能快速的开发、测试、发布?这是「可维护性」有哪些法律法规需要遵守?是否需要申请直播功能有国外用户吗?需要国际化吗?总结本文梳理了什么是架构属性;有哪些架构属性及相关知识点!后续对各个属性进行详细讨论。每个约束之间并不是正交的,可能满足的某个约束,却违背了另外一个或多个约束,这就需要架构师来进行取舍。就像CAP原则一样,一个分布式系统不可能同时满足可用性、一致性和分区容错性。一个架构也不可能同时满足所有的约束。©本文转自(Ala6)博客51CTO博客,如需转载,请自行联系原作者。原文链接(http://blog.51cto.com/13982920/2308354)
-
尊敬的华为云客户:华为云计划于2018/11/08将弹性负载均衡服务(ELB)控制台,从云服务器控制台迁移至网络控制台,届时请您前往网络控制台购买并查看弹性负载均衡的相关资源。路径:登录华为云控制台—所有服务—网络—弹性负载均衡ELB如您有任何问题,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!
-
【摘要】 弹性负载均衡( Elastic Load Balance,简称ELB)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。上一章我们学习了如何创建共享云硬盘,我们基于上一个模板加入创建负载均衡ELB的内容。弹性负载均衡( Elastic Load Balance,简称ELB)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。上一章我们学习了如何创建共享云硬盘,我们基于上一个模板加入创建负载均衡ELB的内容。tosca_definitions_version: huaweicloud_tosca_version_1_0node_templates: myecs: type: HuaweiCloud.ECS.CloudServer properties: availabilityZone: cn-south-1a flavor: c1.medium imageId: a3934478-bfeb-4a02-b257-9089779f0380 instances: 1 name: my-ecs nics: - subnetId: get_reference: mysubnet rootVolume: size: 40 volumeType: SATA securityGroups: - id: get_reference: mysg vpcId: get_reference: myvpc mountedVolumes: - mountPath: '/dev/sdc' volumeId: get_reference: myevs requirements: - vpcId: node: myvpc - securityGroups.id: node: mysg - nics.subnetId: node: mysubnet - mountedVolumes.volumeId: node: myevs mysg: type: HuaweiCloud.VPC.SecurityGroup properties: name: my-sg requirements: - vpcId: node: myvpc mysgrule: type: HuaweiCloud.VPC.SecurityGroupRule properties: direction: ingress ethertype: IPv4 maxPort: 5444 minPort: 5443 protocol: TCP securityGroupId: get_reference: mysg requirements: - securityGroupId: node: mysg mysubnet: type: HuaweiCloud.VPC.Subnet properties: cidr: '192.168.1.0/24' dhcpEnable: true gateway: 192.168.1.1 name: my-subnet vpcId: get_reference: myvpc requirements: - vpcId: node: myvpc myvpc: type: HuaweiCloud.VPC.VPC properties: cidr: '192.168.0.0/16' name: my-vpc myevs: type: HuaweiCloud.EVS.SharedVolume properties: size: 10 availabilityZone: cn-south-1a volumeType: SATA myelb: type: HuaweiCloud.ELB.LoadBalancer.External properties: name: my-elb vpcId: get_reference: myvpc requirements: - vpcId: node: myvpc myelb-listener: type: HuaweiCloud.ELB.Listener properties: protocol: TCP name: my-elb-listener backendPort: 80 backendProtocol: TCP port: 80 lbAlgorithm: roundrobin loadBalanceId: get_reference: myelb requirements: - loadBalanceId: node: myelb myhealth: type: HuaweiCloud.ELB.HealthMonitor properties: unhealthyThreshold: 3 healthyThreshold: 3 healthCheckInterval: 5 healthCheckConnectPort: 80 healthCheckTimeout: 10 listenerId: get_reference: myelb-listener requirements: - listenerId: node: myelb-listener mymember: type: HuaweiCloud.ELB.Members properties: serverIds: - get_reference: myecs listenerId: get_reference: myelb-listener requirements: - serverIds: node: myecs - listenerId: node: myelb-listener首先创建一个elb元素,它是部署华为云PaaS层私网LoadBalancer对象,通过创建LoadBalancer,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到后端的各个容器应用上。参数vpcId是ELB实例所属的VPC,弹性负载均衡需要与后端监听的弹性云服务器处于同一个VPC下。elb-listener元素是弹性负载均衡下的监听器,一个loadBalancer可对应多个监听器,支持对监听器进行增加、删除。它有几个属性值: 1. protocol是负载均衡器协议。 2. name是监听器的名称,设置为my-elb-listener。 3. backendPort表示云服务器端口,可根据实际情况修改。 4. backendProtocol是云服务器协议。 5. port是负载均衡器端口,默认为80,可根据实际情况修改。 6. lbAlgorithm是监听器负载均衡方式,roundrobin:轮询算法, leastconn:最少连接, source:源IP算法;其中轮询算法支持会话保持功能。 7. loadBalanceId是所属的负载均衡器ID,将elb-listener与之前创建的elb关联起来。,然后创建health-monitor元素,它是弹性负载均衡下的健康检查,一个Listener对应一个健康检查,一个健康检查管理多个弹性云服务器,支持对健康检查进行增加删除。 1. unhealthyThreshold判定健康检查结果为fail的阈值,即健康检查连续失败多少次后,将后端云服务器的健康检查状态由success改为fail。 2. healthyThreshold判定健康检查结果为success的阈值。 3. healthCheckInterval是健康检查时间间隔(秒)。 4. healthCheckConnectPort是健康检查使用端口,可根据实际情况修改,默认为云服务器端口。 5. healthCheckTimeout是健康检查超时时间(秒)。 6. listenerId健康检查所属的监听器ID,将health-monitor与elb-listener元素相关联。member元素是弹性负载均衡下的弹性云服务器,一个Listener可以对应多个弹性云服务器,并且可以对监听器进行增加删除。一个HealthMonitor管理多个云服务器。 1. serverIds是后端云服务器ID。 2. listenerId是所属的监听器ID,该参数将member与elb-listener元素相关联。为确保ELB健康检查正常运行,需要在后端弹性云服务器的安全组中添加入方向规则,允许来自100.125.0.0/16网段HTTP协议的访问,同时需要确保云服务器上80端口可返回200。部署堆栈时elb参数组中的vpcId及member参数组中的serverId需要根据实际情况填写,未正确填写会导致堆栈部署失败。负载均衡创建成功:
-
1 简介分布式数据库中间件 DDM分布式数据库中间件(Distributed Database Middleware)是解决数据库容量、性能瓶颈和分布式扩展问题的中间件服务,提供分库分表、读写分离、弹性扩容等能力,应对海量数据的高并发访问场景,有效提升数据库读写性能。MySQL Routermysql-router是mysql官方的轻量级的中间件,用于取代MySQL Proxy应用程序像访问MySQL一样访问MySQL Router,由MySQL Router将数据转发给后端的DDM节点,实现Sidecar模式负载均衡。Sidecar模式是一种从应用程序本身剥离应用程序功能作为单独进程的方法。此模式允许我们向应用无侵入添加多种功能,从而无需向应用程序添加其他配置代码。建议MySQL Router与应用程序部署在同一台机器做Sidecar模式负载均衡,相对于服务端形式的负载均衡,Sidecar模式实现负载均衡可以缩短调用链路,减少服务端中心节点的压力,去中心化,使用更加可靠更加高效。参考资料:分布式数据(DDM)https://www.huaweicloud.com/product/ddm.htmlMySQL Router文档https://dev.mysql.com/doc/mysql-router/8.0/en/https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.htmlmysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz 2 部署Mysql-Router服务# 解压安装程序文件tar -xzvf mysql-router-8.0.11-linux-glibc2.12-x86-64bit.tar.gz # 重命名安装文件夹mv mysql-router-8.0.11-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter # 创建日志和配置相关文件存放目录cd /usr/local/mysqlroutermkdir logsmkdir etc # 利用模板文件创建配置文件cp /usr/local/mysqlrouter/share/doc/mysqlrouter/sample_mysqlrouter.conf ./etc/mysqlrouter.conf # 启动 mysql router/usr/local/mysqlrouter/bin/mysqlrouter -c /usr/local/mysqlrouter/etc/mysqlrouter.conf & 3 配置文件详解首先,获取DDM连接串,如下图所示下面详细介绍mysql-router三种配置方式:I、作为中心代理节使用mysql-router绑定IP不限制,即监听所有ip,任意节点都可以访问,作为数据库访问代理,轮询DDM各个节点。其中,destinations为上文获得的DDM连接串。vi /usr/local/mysqlrouter/etc/mysqlrouter.conf[DEFAULT] logging_folder = /usr/local/mysqlrouter/log/ plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/ config_folder = /usr/local/mysqlrouter/etc/ runtime_folder = /usr/local/mysqlrouter/run/ [logger] level = INFO # 负载均衡配置 [routing:balancing] # 绑定的IP地址 bind_address=0.0.0.0 # 监听的端口 bind_port = 7002 # 连接超时时间(秒) connect_timeout = 3 # 最大连接数 max_connections = 100 # 后端服务器地址.默认读进行轮询 destinations = 192.168.4.235:5066,192.168.4.231:5066 # 路由策略 routing_strategy=round-robin [keepalive] interval = 60连接示例:[root@xxx ]# ./mysql -uddmtest -h128.11.2.2 -P7002 -p Enter password: mysql>128.11.2.2为Mysql Router所在IP II、作为本地数据库代理使用mysql-router绑定本地地址127.0.0.1,作为本地数据库访问代理,仅允许当前节点访问数据库。其要求需要访问数据库的应用与router部署在同一节点,更安全可靠。vi /usr/local/mysqlrouter/etc/mysqlrouter.conf[DEFAULT] logging_folder = /usr/local/mysqlrouter/log/ plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/ config_folder = /usr/local/mysqlrouter/etc/ runtime_folder = /usr/local/mysqlrouter/run/ [logger] level = INFO # 负载均衡配置 [routing:balancing] # 绑定的IP地址 bind_address=127.0.0.1 # 监听的端口 bind_port = 7002 # 连接超时时间(秒) connect_timeout = 3 # 最大连接数 max_connections = 100 # 后端服务器地址.默认读进行轮询 destinations = 192.168.4.235:5066,192.168.4.231:5066 # 路由策略 routing_strategy=round-robin [keepalive] interval = 60连接示例:[root@xxx ]# ./mysql -uddmtest -h127.0.0.1 -P7002 -p Enter password: mysql>mysql客户端与Mysql Router在同一节点。 III、作为本地数据库代理,使用Unix sockets连接(推荐)mysql-router不绑定ip和端口,只使用Unix sockets连接,这样可以不经过tcp协议转发数据,只走操作系统socket通道,更加高效。其同样要求需要访问数据库的应用与router部署在同一节点,但是安全可靠,且高效。 vi etc/mysqlrouter.conf[DEFAULT] logging_folder = /usr/local/mysqlrouter/log/ plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter/ config_folder = /usr/local/mysqlrouter/etc/ runtime_folder = /usr/local/mysqlrouter/run/ [logger] level = INFO # 负载均衡配置 [routing:balancing] # 绑定的IP端口 socket = /tmp/mysqlrouter.sock # 连接超时时间(秒) connect_timeout = 3 # 最大连接数 max_connections = 100 # 后端服务器地址.默认读进行轮询 destinations = 192.168.4.235:5066,192.168.4.231:5066 # 路由策略 routing_strategy=round-robin [keepalive] interval = 60其中,destinations为上文获得的DDM连接串 连接示例[root@xxx ]# ./mysql -uddmtest -p -S /tmp/mysqlrouter.sock Enter password: mysql>mysql客户端与Mysql Router在同一节点。
-
本篇文章讲述如何通过创建经典型公网负载均衡 (elb-external)示例模板创建堆栈。该模板创建一个包含一个监听器的经典型公网负载均衡,监听器后端可添加2个弹性云服务器。【部署结果展示】点击资源名称可以跳转到所创建的弹性负载均衡资源页面。健康检查:后端云服务器:【部署过程详解】*部署前准备:创建2台弹性云服务器,云服务器可以不绑定弹性IP。创建弹性云服务器时,如果所选择的的安全组规则未包含监听器衡健康检查需要放行的规则,则需要添加,下面以System-default安全组为例添加规则:其中协议及端口为监听器健康检查使用的协议及端口,源地址固定为100.125.0.0/16:创建弹性云服务器,创建成功后将弹性云服务器的ID拷贝下来,后续填写堆栈配置参数时使用:*参数填写:1.为堆栈填写名称及描述2.填写堆栈的配置参数:模板中包含了负载均衡,监听器,健康检查及后端云服务器四个部分,堆栈配置参数按照这四个部分进行了标签分类,可在对应的标签下填写相关组件的参数。部署时可以直接使用示例模板中的参数,也可以根据实际情况自行选择。2.1 监听器参数:监听器参数说明如下:2.2 负载均衡参数:负载均衡参数如下,其中负载均衡名称自动生成,创建完成后可以在堆栈详情页面看到:模板中的负载均衡默认带有弹性IP,未带有弹性IP的使用方式可以参考经典型私网负载均衡(elb-internal)。参数中的计费方式,EIP类型及VPC的ID均支持下拉选择:2.3 健康检查参数:健康检查的参数设置如下,需要保证协议中设置的访问方式畅通,这里使用TCP 22作为健康检查的协议及端口:2.4 后端云服务器参数:在后端云服务器参数中填写刚才拷贝的弹性云服务器的ID:*模板参数与弹性负载均衡界面对应关系:1.负载均衡:2.监听器:3.健康检查:*扩展:后端云服务器个数的扩展1 通过增加数组长度增加个数:输入界面:2 通过split函数,添加分隔符,弹性云服务器的输入参数可以缩减为一个,这里使用“, ”为分隔符,多个弹性云服务器ID通过“, ”分隔:输入界面:
-
发扬工匠精神,DDM为了给用户提供性能最强的云服务,致力于降低每一个环节上的性能损耗。应用程序连接到DDM的链路上可能会有性能损失,一些企业通过自行研发客户端程序来实现负载均衡,但这样一来,服务部署和升级的复杂度都会大大提升,目前业界并没有通用的成熟的解决方案。针对这一问题,DDM内部实现了MySQL原生通信协议,将自己模拟成一个MySQL客户端,使应用程序连接到DDM和连接到普通的MySQL一样。此外,DDM采用MySQL JDBC驱动自带的负载均衡模型,不仅提供客户端负载均衡,还支持容灾切换,如果集群内部有节点发生故障,驱动会自动屏蔽掉该故障节点,故障恢复后会自动加入到负载均衡。应用程序通过JDBC loadblance连接到DDM,链路畅通无阻,没有中间LB节点带来性能损耗,还提供事务级负载均衡,给用户带来卓越的性能体验。
-
本帖最后由 蓝书签 于 2018-3-16 20:49 编辑弹性负载均衡 弹性负载均衡(Elastic Load Balance)将访问流量自动分发到多台弹性云服务器,扩展应用系统对外的服务能力,实现更高水平的应用程序容错性能。弹性负载均衡是什么?弹性负载均衡(Elastic Load Balance ,以下简称ELB)通过监听规则将访问流量自动分发到后端多台弹性云服务器,扩展应用系统对外的服务能力,实现更高水平的应用程序容错性能。用户通过基于浏览器、统一化视图的云计算图形化管理界面,可以创建负载均衡器,为服务配置需要监听的端口信息及后端云服务器,消除单点故障,提高整个系统的可用性。 点击下面链接帮助您如何购买弹性负载均衡购买弹性负载均衡 点击下面帮助您了解弹性负载均衡服务,快速掌握服务创建方法,以及如何使用 用户指南 点击下面帮助您了解各个接口的功能、参数、使用样例等接口调用方法 以下附件资料为版权所有 © 华为技术有限公司 ,仅供学习交流使用 12569 12568 12567 12566 12565 12569 12568 12567 12566 12565
-
elb 私网支持配置 根据 path 路径格则配置自己的负载均衡策略吗?
-
本帖最后由 瓷喵 于 2017-12-27 16:14 编辑传统的消息有两种模式:队列和发布订阅。队列的优点是允许多个消费者瓜分处理数据,这样可以扩展处理,但是,一旦消息者进程读取后故障了,消息就丢了。而发布和订阅允许你广播数据到多个消费者,由于每个订阅者都订阅了消息,所以没办法缩放处理。Kafka的消费者组的概念结合了队列和发布订阅两种模式的优点。Kafka的模型使得每个Topic都具有队列和发布订阅两种特性。作为队列的时候消费组可以将将消息处理分发到不同的处理器上;作为发布订阅模式的时候,允许将消息广播到不同的消费者组中。相对于传统的消息系统,Kafka还具有很强的顺序保证机制。传统队列顺序保存消息在Server上,多个消费者从队列中获取并处理消息。尽管在服务器上消息是顺序的,但是由于采用异步的方式分发到消费者,因此到达的顺序就不能保证。消息系统常常通过仅设1个消费者来解决这个问题,但是这意味着没用到并行处理。kafka通过并行topic的parition提供了顺序保证和负载均衡。每个partition仅由同一个消费者组中的一个消费者消费到。并确保消费者是该partition的唯一消费者,并按顺序消费数据。每个topic有多个分区,则需要对多个消费者做负载均衡,但请注意,相同的消费者组中不能有比分区更多的消费者,否则多出的消费者一直处于空等待,不会收到消息。
-
弹性负载均衡使用的IP由ELB独占吗?
-
弹性负载均衡的可以消除单点故障吗?
-
负载均衡运行中是否可调整ECS数量?
上滑加载中
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签