您现在的位置:首页
--> 龙浩的blog
分布式理论 CAP(Eric Brewer) Web服务无法同时满足以下3个属性 Consistency(一致性),数据一致更新,所有数据变动都是同步的 Availability(可用性),每个操作都必须以可预期的响应结束 Partition tolerance(分区容错性),即使出现单个组件无法可用,操作依然可以完成 在任何数据库设计中,一个Web应用至多只能同时支持上面的两个属性,不可能三者兼顾。对于分布式系统来说,分区容错是基本要求,所以必然要放弃一致性。对于大型网站来说, 分区容错和可用性的要求更高,所以一般都会选择适当放弃一致性。对应CAP理论,NoSQL追求的是AP,而传统数据库追求的是CA,这也可以解释为什么 传统数据库的扩展能力有限的原因。
网站受到DDOS的攻击,Inbound最高请求58.85Mb/sec 。尽管一开始解决问题的思路是错误的,但是在这个过程中,我们思考问题的思路对团队的成长有所帮助,我们知道什么方法无法解决问题。
做benchmark测试的过程中,总是会涉及到linux操作系统底层的设置导致无法充分利用机器的性能,在调试的过程中,不少资料没能和linux kernel版本对应上导致一些参数的设置错误。根据现有服务器的硬件条件和软件版本做相关优化,把一些实践的心得分享出来。
Google Guava cache的主要功能点: * 你需要给现有系统加速; * 有些key需要不知一次的查询获取; * 从策略上讲,你的应用需要从策略上把所有的value从cache中清理出来 — 你试图减少重复的工作;[注:weakKey , weakValue] * cache仅仅存储在内存中,没有在文件中或者其他的server上面,如果不满足你的需求,可以考虑Memcached API的两种调用方式 1:普通的调用方式,通过key得到value的时间较短
Spring的RMI , Http Invoker, Hessian测试结果
注:一些内容不熟悉,所以没有翻译。原文地址在这里 Tumblr每个月增长30% , 一天5亿网页浏览,40K/sec , 每天3TB的数据存储在1000+的服务器上。最开始只有4名工程师来处理所有事情,当有20多个工程师的时候,才有实力出一些有趣的解决方案。 Tumblr最开始是典型的大型LAMP应用,现在的分布式服务模型使用了Scala, HBase, Redis, Kafka , Finagle等,现在在处理PHP应用的问题,开始走向面向服务的设计。 分布式系统工程师 Blank Matheny讲述Tumblr的架构 现状 每天5亿PV ~20 工程师平均每秒4W请求每天1+ TB 数据写入到Hadoop集群每天更多TB的数据写入到 MySQ
在我们学习面向对象语言时,两个概念相当难理解:类必须高内聚,低耦合。今天的博文我们将解释这两个概念的重要性,同时展示Sonar如何帮助大家来评估类的内聚性。 几周前,我开始讨论如何《Fight Back Design Erosion by Breaking Cycles with Sonar》,我提到好的设计应该能够通过很小的努力编写的新代码块就可以替换系统中的相关部分代码。第一个层面需要从“宏观水平”来看,例如:确保...
准备用varnish来做图片缓冲服务器,用ab测试了一下单文件读取。发现nginx和varnish都可以把网卡写满(千兆网卡速度》110M/S)。调整了ab测试的并发数,在同样的配置的机器上,发现nginx的在1W并发情况下,依然可以运行;varnish在3600并发测试的时候,直接开始报错。不能不说nginx是神器,varnish不靠谱么?
• 结对编程实践
不少程序员会说“代码写的太烂了”,说很容易,然后您能告诉别人什么地方需要改进么?其实我也有这样的毛病,单个人代码写的好时偶然的,写的烂是必然的,所以需要借助团队的力量来告诉成员需要改进的地方。由于业务编码工作接近尾声,业务开发人员和我主要从测试代码开始入手来改善代码质量,优化业务流程。 流程:由我通过mock的方式写service层的测试代码(仅仅测试复杂的业务流程,仅仅...
测试DAO层最常见的就是直接组织数据,调用相关的方法,然后查看数据库,看看相关数据是否在DB中正确的展示。这样测试,效率低下,容易出错,过多的依赖了人肉。如果选择测试数据来配置,根据配置的测试数据验证相关信息,或许能够达到事半功倍的效果。
1:配置情况 nginx机器配置: CPU: E7500 @ 2.93GHz (双核) 内存:4G varnish机器配置: CPU: E3300 @ 2.50GHz (双核) 内存:2G 测试脚本执行机器配置: CPU: AMD Phenom(tm) II X4 925 Processor 内存:2G 2:测试准备工作 2.1:安装siege 使用压力测试工具s...
由于以前的Domain对象都是不需要序列化的,所以为了操作数据库查询的方便,直接采用继承BaseDomain的方式来完成。这样在传递动态参数的时候,只需要把参数放到Map总,就可以很好的在ibatis配置文件(map.xx来直接获取值)中使用。 这样导致的一个害处就是对象看起来有直接根本就不需要的属性,即使你添加关键字transient,不少程序员依然在set的时候会费解一些不必要的属性。例如:在insert()设置属性的...
为了分析java应用的内存泄漏,使用thread dump往往解决不了问题。使用jstat【eg:jstat -gcutil pid 1000 5】工具查看运行的java应用的heap size,perm size ,survivor ratio等,当时你无法知道是什么对象把堆填满了。 什么是 Java heap dump 首先需要搞懂什么是java heap,java heap是分配给实例类和数组对象运行数据区,所有java线程在运行期间共...
某同事说大公司做项目的特点是:“大项目失败了,可以找些大项目中的小项目继续为公司做贡献。“当时我相信这句话,因为软件毕竟可以抽象出一些公用的东西出来,继续为其他项目服务。当完成该同事带的项目后,我否认了这句话。相信了这句话:覆巢之下,岂有完卵? 从每个人说的话中基本可以看出一个人做事的态度,如果一开始就觉得项目可能失败,那肯定是抱着侥幸的心理在做事,一...
[ 共14篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
- [55] Oracle MTS模式下 进程地址与会话信
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] 如何拿下简短的域名
- [53] android 开发入门
- [52] Go Reflect 性能
- [51] 图书馆的世界纪录
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑
赞助商广告