云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

域名解析_私有云数据库_安全稳定

小七 141 0

使用自定义CloudWorkers平衡负载

以下是Jayaprabhakar Kadarkari的客座帖子,他是Codiva.io公司,一个供全世界计算机科学学生使用的在线IDE。他使用全栈技术来交付低延迟和可伸缩的web应用程序。你的网站开通了吗?交通拥挤?你打算增加更多的服务器?你需要负载平衡来保持网站的可伸缩性和可靠性。Cloudflare提供了强大的负载平衡功能,但有些情况下现成的选项无法满足您的特定需求。对于这些情况,您可以编写自己的Cloudflare工人。进来在这篇文章中,我们将了解负载平衡器,以及如何使用Cloudflare服务以较低的成本设置它们工人们。这个post假设您对JavaScript有基本的了解,因为这是用来编写Cloudflare的语言工人。那个基本模式基本模式首先添加'fetch'事件侦听器来拦截请求。您可以在Cloudflare仪表板或使用Cloudflare配置要拦截的请求API。那么,修改URL的主机名并将请求发送到新的主机.addEventListener('fetch',event=>{var url=新url(event.request.url);// https://example.com/path/到https://myorigin.example.com/pathurl.主机名='肌动蛋白'+url.主机名事件响应(获取(url));});这还没有做任何有用的事情,但这是基本模式,将在其余部分中使用示例。加载具有随机路由的平衡器当您有一个源服务器列表时,选择一个随机主机进行路由给。这个是一种非常基本的负载平衡技术,可以将流量均匀地分布在所有源服务器上服务器.var主机名=["0。example.com网站","1。example.com网站","2。example.com网站"];addEventListener('fetch',事件=>{var url=新url(event.request.url);//随机选择下一个主机url.主机名=主机名[getRandomInt(主机名.长度)];事件响应(获取(url));});函数getRandomInt(max){返回数学地板(数学随机()*最大值);}带回退功能的负载平衡器当主机停机时怎么办?一个简单的回退策略是将请求路由到另一个主机。只有在知道请求是幂等的情况下才使用此选项。一般来说,这意味着GET请求是可以的,但是您可能希望处理另一个POST请求方式.addEventListener('fetch',event=>{//随机选取主主机var primary=getRandomInt(主机名.长度);var primaryUrl=新URL(event.request.url);primaryUrl.hostname=主机名[主];var timeoutId=setTimeout(函数(){无功备用;做{//选择备份主机的简单解决方案备份=getRandomInt(主机名.长度);}while(备份===主);var backupUrl=新URL(event.request.url);备份URL.hostname=主机名[备份];事件响应(fetch(backupUrl));},2000/*2秒*/);获取(primaryUrl).then(功能(响应){清除超时(timeoutId);事件响应(回应);});});一旦Cloudflare IP地理位置设置为启用了。你可以访问它使用:var countryCode= event.request.headers.get('CF-IPCountry');我们可以使用countryCode将请求从不同的位置路由到不同区域的不同服务器。例如,80%的流量Codiva.io公司来自美国和印度。所以,我在两个不同的地区有服务器(美国俄勒冈和印度孟买)。来自印度和其他邻近国家的请求被路由到印度的服务器。所有其他请求都被路由到美国数据中心.const我们主机="us.example.com网站"主机中的常量="in.example.com网站"var国家地图={IN:IN_主机,PK:IN_主机,BD:在主机上,SL:在主机上,NL:主机}addEventListener('fetch',事件=>{var url=新url(event.request.url);变量国家代码=event.request.headers.get('CF-IPCountry');if(国家/地区地图[国家代码]){url.主机名=国家地图[国家代码];}其他{url.主机名=美国主机;}事件响应(获取(url));});现在,让我们将地理路由、随机负载平衡和回退合并为一个工作人员:施工单位= ["0。us.example.com网站","1。us.example.com网站","2。us.example.com网站"];主机中的常量=["0。in.example.com网站","1。in.example.com网站","2。in.example.com网站"];var国家地图={IN:IN_主机,PK:IN_主机,BD:在主机上,SL:在你的主人,NL:主机}addEventListener('fetch',事件=>{var url=新url(event.request.url);变量国家代码=event.request.headers.get('CF-IPCountry');var hostnames=美国主机;if(国家/地区地图[国家代码]){主机名=国家地图[国家代码];}//随机选择下一个主机var primary=主机名[getRandomInt(主机名.长度)];var primaryUrl=新URL(event.request.url);primaryUrl.hostname=主机名[主];//如果在超时时间内没有响应,则返回var timeoutId=setTimeout(函数(){无功备用;做{//选择备份主机的简单解决方案备份=getRandomInt(主机名.长度);}while(备份===主);var backupUrl=新URL(event.request.url);备份URL.hostname=主机名[备份];事件响应(fetch(backupUrl));},2000/*2秒*/);获取(primaryUrl).then(功能(响应){超时(clearTimeout ID);事件响应(回应);});});函数getRandomInt(max){返回数学地板(数学随机()*最大值);}回顾本文,您看到了Cloudflare workers的强大功能以及使用它的简单程度。在使用workers实现定制负载平衡器之前,请看一下Cloudflare的负载平衡器。用于更多的例子,看看开发者文档页面上的食谱。