您的位置:首页 > 运维架构 > 网站架构

wcf系列学习5天速成——第四天 wcf之分布式架构(转载)

2012-08-17 14:01 399 查看
今天是wcf系列的第四天,也该出手压轴戏了。嗯,现在的大型架构,都是神马的,

nginx鸡群,iis鸡群,wcf鸡群,DB鸡群,由一个人作战变成了群殴.......

今天我就分享下wcf鸡群,高性能架构中一种常用的手法就是在内存中维护一个叫做“索引”的内存数据库,

在实战中利用“索引”这个概念做出"海量数据“的秒杀。

好,先上图:

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Timers;
using System.Diagnostics;
using BaseClass;
using ClientService;
using ClientService.HeartBeatService;
using System.Configuration;
using SearhService;

namespace ClientService
{
class Program : IAddressCallback
{
static void Main(string[] args)
{

ServiceHost host = new ServiceHost(typeof(ServiceList));

host.Open();

var client = new AddressClient(new InstanceContext(new Program()));

//配置文件中获取iis的地址
var iis = ConfigurationManager.AppSettings["iis"];

//将iis的地址告诉心跳
client.GetService(iis);

//从集群中获取search地址来对Search服务进行调用
var factory = new ChannelFactory<IProduct>(new NetTcpBinding(SecurityMode.None), new EndpointAddress(ServiceList.Search));

//根据userid获取了shopID的集合
//比如说这里的ShopIDList是通过索引交并集获取的分页的一些shopID
var shopIDList = factory.CreateChannel().GetShopListByUserID(15);

var strSql = string.Join(",", shopIDList);

Stopwatch watch = new Stopwatch();

watch.Start();
SqlHelper.Query("select s.ShopID,u.UserName,s.ShopName  from [User] as u ,Shop as s where s.ShopID in(" + strSql + ")");
watch.Stop();

Console.WriteLine("通过wcf索引获取的ID >>>花费时间:" + watch.ElapsedMilliseconds);

//普通的sql查询花费的时间
StringBuilder builder = new StringBuilder();

builder.Append("select * from ");
builder.Append("(select  ROW_NUMBER() over(order by s.ShopID) as NumberID, ");
builder.Append(" s.ShopID, u.UserName, s.ShopName ");
builder.Append("from Shop s left join [User] as u on u.UserID=s.UserID ");
builder.Append("where  s.UserID=15) as array ");
builder.Append("where NumberID>300000 and NumberID<300050");

watch.Start();
SqlHelper.Query(builder.ToString());
watch.Stop();

Console.WriteLine("普通的sql分页 >>>花费时间:" + watch.ElapsedMilliseconds);

Console.Read();
}

public void LiveAddress(string address)
{

}
}
}


性能图:



对的,一个秒杀,一个是毫秒杀,所以越复杂越能展示出“内存索引”的强大之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: