Nginx搭建高可用,高并发的WCF集群教程

网友投稿 866 2023-03-10

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Nginx搭建高可用,高并发的WCF集群教程

很多情况下基于wcf的复杂均衡都首选zookeeper,这样可以拥有更好的控制粒度,但zk对C# 不大友好,实现起来相对来说比较麻烦,实际情况下,如果你的负载机制粒度很粗糙的话,优先使用nginx就可以搞定,既可以实现复杂均衡,又可以实现双机热备,以最小的代码量实现我们的业务,下面具体分享下。

一:准备的材料

1. 话不多说,一图胜千言,图中的服务器都是采用vmware虚拟化,如下图:

三台windows机器 ,两个WCF的windows服务器承载(192.168.23.187,192.168.23.188),一台Client的服务器(192.168.23.1)

一台Centos机器,用来承载web复杂均衡nginx(192.168.23.190)。

二:环境搭建

1、WCF程序

既然是测试,肯定就是简单的程序,代码就不完全给出了。

public class HomeService : IHomeService{    public string DoWork(string msg)    {        var ip = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault(i => i.AddressFamily ==                                                           AddressFamily.InterNetwork).ToString();        return string.Format("当前 request 由 server={0} 返回", ip);    }}

public class HomeService : IHomeService{    public string DoWork(string msg)    {        var ip = Dns.GetHostAddresses(Dns.GetHostName()).FirstOrDefault(i => i.AddressFamily ==                                                           AddressFamily.InterNetwork).ToString();        return string.Format("当前 request 由 server={0} 返回", ip);    }}

App.Config代码

因为windows的两台机器的ip地址是192.168.23.187,192.168.23.188,所以部署的时候注意一下config中的baseAddress地址。

2、centos上的nginx搭建

[root@localhost nginx-1.13.6]# ./configure --prefix=/usr/myapp/nginx [root@localhost nginx-1.13.6]# make && make install

[root@localhost nginx-1.13.6]# ./configure --prefix=/usr/myapp/nginx [root@localhost nginx-1.13.6]# make && make install

然后在nginx的安装目录下面找到conf文件,修改里面的nginx.conf 配置。

详细配置如下,注意下面“标红”的地方,权重按照1:5的方式进行调用,关于其他的配置,大家可以在网上搜一下就可以了。

3、 client端的程序搭建

第一件事就是将 192.168.23.190 映射到本机的host中去,因为服务不提供给第三方使用,所以加host还是很轻松的。

class Program {     static void Main(string[] args)     {         for (int i = 0; i < 1000; i++)         {             HomeServiceClient client = new HomeServiceClient();             var info = client.DoWork("hello world!");             Console.WriteLine(info);             System.Threading.Thread.Sleep(1000);         }         Console.Read();     }

class Program { static void Main(string[] args) { for (int i = 0; i < 1000; i++) { HomeServiceClient client = new HomeServiceClient(); var info = client.DoWork("hello world!"); Console.WriteLine(info); System.Threading.Thread.Sleep(1000); } Console.Read(); }

最后来执行以下程序,看看1000次循环中,是不是按照权重1:5 的方式对后端的wcf进行调用的???

上一篇:实现基于LVS负载均衡集群的电商网站架构
下一篇:kafka 、 zookeeper 集群(二)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~