QCon的一些分享

QCon全球企业开发大会(QCon Enterprise Software Development Conference)是由InfoQ网站主办的全球顶级技术盛会,每年在伦敦、北京、东京、圣保罗、旧金山等城市召开,今年是第一次在中国杭州举办。自2007年3月份在伦敦召开首次举办以来,已经有包括金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

地址:http://qconhangzhou.com/

以下内容是公司同事的见闻和总结,感觉不错,跟大家分享下

新浪微博Redis应用实践

Redis(http://redis.io/)是一个key-value存储系统、类似于Memcached、但相比前者有一定的优势(如支持更多的Value、性能更好等)

新浪大量使用Redis、其中一个重要使用场景是计数器、微博有大量需要实时计数的场景、如:微博数,粉丝数和关注数等等、

在新浪微博如此海量的数据和高并发场景(如一条微博在短时间内会被迅速转发N次)去count和Update DB显然不靠谱。

Offer这边也有很多使用数字的场景:如重发的400限制条数、普及版会员的优先展示Offer数等、

当前是采用MC(memcached)+Mysql的方式、但MC的穿透问题、高并发导致和DB数据不一致的问题、以往也引起过不少投诉。

而使用Redis可以很好的解决这些问题。当然新浪的经验也告诉我们Redis不是说用了肯定就合适、需要看具体的业务和使用场景。

eBay技术平台

同为B2B站点、发现Ebay的技术架构和我们有不少的共同点、技术上面临的挑战也跟我们有很大的相似

eBay的一些数据

1、数据总存储量达到9P

2、10000台应用服务器

3、4400万行代码

4、20亿张图片

5、可用性99.94%

架构特点:

1、数据库、应用层、搜索引擎等都进行了拆分、保证可扩展性

2、应用间的Session无状态化(类似于Session服务化)、应用服务器的无状态化

3、在容错和监控方面:有Logging中心、Mark downs(自动发现哪些应用不可用、一旦发现就不再请求到该应用)

4、服务化大规模使用(但主要采用Webservice的方式、和amazon类似)

面临的挑战和一些解决方案:

1、代码业务逻辑太复杂(4400万行代码、4000多个Jar包)、应用间依赖太多、耦合很高、开发效率很低

OSGi模块化、封装内部逻辑、约定好模块之间的边界和耦合方式

2、服务的数据格式很多、服务(Webservice)大量使用带来的延迟问题

将各种数据格式统一转换成JAXB、采用二进制格式(Google的protocol buf)替代XML和JSON等

3、服务调用中的N+1问题、服务返回数据利用率问题(有时只是获取服务返回对象的某一个字段、其他都浪费掉了)、服务串行调用延迟太高(如何能够实现并行调用)

自主开发了ql.io(即将开源)、能够像写SQL那样调用服务、可以有类似于SQL那样的Where、Filter、Join、Order By等条件、只取出想要的数据、也可以并行调用服务。

大众点评网的技术变迁之路

总体讲的都是通用的技术、Memcached的使用经验方面讲的比较细致:

1、缓存对象粒度的控制、便于缓存的更新删除

有时需要缓存一个列表、通用的方式是把整个列表对象全部放到缓存里面、但是这样List里的对象只要有一个发生变更整个列表就需要更新或者删除

改进的方式是:比如原来是缓存List<Shop>、现在首先缓存一个List<ShopIndexId>、里面的Key只是一个Shop的Id、然后分别缓存每个Shop对象、这样的

好处是每个Shop对象本身可以直接通过缓存读取、当单个Shop对象变更时不需要清除整个List、List里只有Id、而这一般都不会改变、通过Memcached的

Mget()可以一次性获取整个列表

2、大批量缓存的清除

如果缓存的数据格式变化较大时、为了防止缓存的脏数据问题;一般可以采用新建Region让原来的缓存自动过期而不是手动清除(Lazy Delete)

如果缓存的数据大体跟原来相同、只是某个字段变化的话可以采用给Key加版本号的方式来控制、大众点评网写了一个通用的Cache Provider组件来

自动管理Key的版本号、避免了开发自己去维护版本号

3、缓存序列化和反序列化对CPU和网络的开销

可以采用一些相对高效的数据交换格式如Google Protocol Buffer(空间利用率和序列化性能比XML、Json、Java对象序列等好很多)

4、多Memcached服务器下的分布式算法

采用业界通用的一致性哈希算法(我们还用模取余的方式、说是为了兼容老代码)

5、在数据访问层DAO实现自动缓存

通过AOP来实现、确实很多时候只是缓存DAO层返回的对象、实现方式一般都差不多的、通过AOP来自动处理可以减少很多重复代码

6、缓存雪崩问题

指的是缓存大量失效导致DB负载瞬间上升的问题(这个我们以前也碰到过)、大众点评网原来是采用双缓存的策略、但是这样维护起来比较麻烦、且容易造成缓存错乱的情况

后面准备采用Redis来替代Memcached也解决这个问题(其他方面:复制分发、对象的部分读取、高并发下的性能更好)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值