List Posts

View All
dems-continue-to-reject-gop-efforts-to-fund-ice-in-dhs-fight-despite-terror-concerns:-‘that’s-on-them’
Politics

Dems continue to reject GOP efforts to fund ICE in DHS fight despite terror concerns: ‘That’s on them’

Democrats on Capitol Hill are accusing Republicans of walking away from attempts to shrink the size of a partial government…

trump’s-demand-for-colleges-nationwide-to-fork-over-race-data-faces-legal-hurdle
Politics

Trump’s demand for colleges nationwide to fork over race data faces legal hurdle

A U.S. judge in Boston on Friday temporarily blocked President Donald Trump from ordering colleges to collect and turn over detailed…

democrat-darling-talarico-called-out-for-making-sixth-grade-public-students-write-‘obama-memoirs’
Politics

Democrat darling Talarico called out for making sixth-grade public students write ‘Obama memoirs’

Democrat darling and Texas Senate candidate James Talarico is taking heat after it was discovered that, as a public school…

dem-senators-in-the-hot-seat-as-republicans-rip-their-dhs-vote-amid-terror-threats:-‘under-attack’
Politics

Dem senators in the hot seat as Republicans rip their DHS vote amid terror threats: ‘Under attack’

Sen. Adam Schiff, D-Calif., claimed he offered Republicans a chance to spare the Federal Emergency Management Agency (FEMA) from the…

World

使用开源软件,设计高性能可扩展网站

2006-6-17 于敦德 上次我们以LiveJournal为例详细分析了一个小网站在一步一步的发展成为大规模的网站中性能优化的方案,以解决在发展中由于负载增长而引起的性能问题,同时在设计网站架构的时候就从根本上避免或者解决这些问题。 今天我们来看一下在网站的设计上一些通常使用的解决大规模访问,高负载的方法。我们将主要涉及到以下几方面: 1、 前端负载 2、 业务逻辑层 3、 数据层 在LJ性能优化文章中我们提到对服务器分组是解决负载问题,实现无限扩展的解决方案。通常中我们会采用类似LDAP的方案来解决,这在邮件的服务器以及个人网站,博客的应用中都有使用,在Windows下面有类似的Active Directory解决方案。有的应用(例如博客或者个人网页)会要求在二级域名解析的时候就将用户定位到所属的服务器群组,这个时候请求还没到应用上面,我们需要在DNS里解决这个问题。这个时候可以用到一款软件bind dlz,这是bind的一个插件,用于取代bind的文本解析配置文件。它支持包括LDAP,BDB在内的多种数据存储方式,可以比较好的解决这个问题。 另外一种涉及到DNS的问题就是目前普遍存在的南北互联互通的问题,通过bind9内置的视图功能可以根据不同的IP来源解析出不同的结果,从而将南方的用户解析到南方的服务器,北方的用户解析到北方的服务器。这个过程中会碰到两个问题,一是取得南北IP的分布列表,二是保证南北服务器之间的通讯顺畅。第一个问题有个笨办法解决,从日志里取出所有的访问者IP,写一个脚本,从南北的服务器分别ping回去,然后分析结果,可以得到一个大致准确的列表,当然最好的办法还是直到从运营商那里拿到这份列表(update:参见这篇文章)。后一个问题解决办法比较多,最好的办法就是租用双线机房,同一台机器,双IP,南北同时接入,差一些的办法就是南北各自找机房,通过大量的测试找出中间通讯顺畅的两个机房,后一种通常来说成本较低,但效果较差,维护不便。 另外DNS负载均衡也是广泛使用的一种负载均衡方法,通过并列的多条A记录将访问随即的分布到多台前端服务器上,这种通常使用在静态页面居多的应用上,几大门户内容部分的前端很多都是用的这种方法。 用户被定位到正确的服务器群组后,应用程序就接手用户的请求,并开始沿着定义好的业务逻辑进行处理。这些请求主要包括两类静态文件(图片,js脚本,css等),动态请求。 静态请求一般使用squid进行缓存处理,可以根据应用的规模采用不同的缓存配置方案,可以是一级缓存,也可以是多级缓存,一般情况下cache的命中率可以达到70%左右,能够比较有效的提升服务器处理能力。Apache的deflate模块可以压缩传输数据,提高速度,2.0版本以后的cache模块也内置实现磁盘和内存的缓存,而不必要一定做反向代理。 动态请求目前一般有两种处理方式,一种是静态化,在页面发生变化时重新静态页面,现在大量的CMS,BBS都采用这种方案,加上cache,可以提供较快的访问速度。这种通常是写操作较少的应用比较适合的解决方案。 另一种解决办法是动态缓存,所有的访问都仍然通过应用处理,只是应用处理的时候会更多的使用内存,而不是数据库。通常访问数据库的操作是极慢的,而访问内存的操作很快,至少是一个数量级的差距,使用memcached可以实现这一解决方案,做的好的memcache甚至可以达到90%以上的缓存命中率。10年前我用的还是2M的内存,那时的一本杂事上曾经风趣的描述一对父子的对话: 儿子:爸爸,我想要1G的内存。…

World

从LiveJournal后台发展看大规模网站性能优化方法

于敦德 2006-3-16 一、LiveJournal发展历程 LiveJournal是99年始于校园中的项目,几个人出于爱好做了这样一个应用,以实现以下功能: 博客,论坛 社会性网络,找到朋友 聚合,把朋友的文章聚合在一起 LiveJournal采用了大量的开源软件,甚至它本身也是一个开源软件。 在上线后,LiveJournal实现了非常快速的增长: 2004年4月份:280万注册用户。 2005年4月份:680万注册用户。 2005年8月份:790万注册用户。 达到了每秒钟上千次的页面请求及处理。 使用了大量MySQL服务器。 使用了大量通用组件。 二、LiveJournal架构现状概况 三、从LiveJournal发展中学习 LiveJournal从1台服务器发展到100台服务器,这其中经历了无数的伤痛,但同时也摸索出了解决这些问题的方法,通过对LiveJournal的学习,可以让我们避免LJ曾经犯过的错误,并且从一开始就对系统进行良好的设计,以避免后期的痛苦。 下面我们一步一步看LJ发展的脚步。

World

imageMagick图片处理工具

ImageMagick是一套Linux下的开源图形处理工具,针对几乎所有的图片格式提供比较全面的图片处理功能。不像windows下的photoshop,先要双击运行,然后打开图片,然后才能对图片进行处理,ImageMagick可以直接在命令行下运行,加上几个参数,就可以得到想要的图片了,而大批量的处理图片也比photoshop简单的多,写个shell多循环几次就可以了。 假如我想给图片加个框,转一下,再加个阴影,输入以下的命令就可以了: convert -size 400×180 hatching.jpg -thumbnail ‘200×90>’ -bordercolor white -border 6 -bordercolor grey60 -border 1 -background none -rotate 6…

World

bind dlz – 分布式系统的请求分发工具

bind dlz全称是bind dynamic loadable zones,是基于bind的提供的一个组件,作用看名字就知道了,支持动态域加载支持。 bind已经有很久的历史,目前是搭建DNS服务器的首选。对于一般网站来说,一个标准的bind已经完全可以完成所有dns解决的工作,但在海量域名数量的情况下,bind也确实存在着一些问题: 1、域名解析信息全部存储在文本文件中,这非常容易导致由于编辑出错导致的域名解析出错。 2、bind运行时将全部的解析信息放在内存里,如果数量巨大将可能出现内存不足的情况,同时解析信息重新加载时所耗费的时间也非常值得考虑,由于加载时间较长,所以基本可以不考虑动态的进行域名的调整。 dlz就是为了解决这个问题而针对bind开发的组件,可以将域名解析信息放在数据库中,从而避免域名信息变动时重新加载的时间,在变动后马上生效。 dlz支持多种数据存储形式,包括文件系统,Berkeley-DB,Postgre-SQL,MySQL,ODBC,LDAP等等。性能的比较在这里。 bind dlz这种提供动态的域名调整,并且仍然可以提供高性能的dns解析服务的特点可以应用于提供二级或三级域名服务的分布式系统的前端,对不同的域名解析到所在服务器组上,从而实现可扩展的系统架构。

World

使用memcached进行内存缓存

旧文重发 2005.8.9 通常的网页缓存方式有动态缓存和静态缓存等几种,在ASP.NET中已经可以实现对页面局部进行缓存,而使用memcached的缓存比ASP.NET的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出。而memcached最大的优点是可以分布式的部署,这对于大规模应用来说也是必不可少的要求。 LiveJournal.com使用了memcached在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即将采用memcached作为缓存工具。memcached可以大规模网站应用发挥巨大的作用。

World

CMS系统的演进

CMS即Content Management System,一般用于网站的内容组织发布。不严格的意义上来看,博客系统也可以算是一个小型的CMS系统。最近做了一个小的CMS系统,感悟不少。 CMS最基本的功能当然是文章发布系统,后台提供一个文章管理的功能,前面将文章显示出来,按照栏目进行组织。当然,栏目,用户,权限管理等基本功能也是必不可少。 开始文章的显示是动态的,每次有人看都执行一下,然后把页面显示出来。后来发布动态的发布虽然实现简单,但即有着一些天然的缺陷。例如抵御大规模的访问,虽然可以通过缓存来进行解决,但毕竟无法从根本上解决这个问题。还有就是文章浏览与管理集中,依赖于同一数据源,一台数据源出现问题两个服务都无法正常提供。在这个条件下很多CMS就提供了静态化的发布方式,文章以静态文件发布出去后与CMS系统没有直接的关系,无论是访问速度,还是可靠性都得到大幅的提高。 Content的指的是内容,并不单纯是文章,而互联网的逐步发展使用户已经不满足于简单的文本阅读,于是CMS又添加了图文混排的功能,开始是单图,然后进一步是组图。 图片加上了以后,很多网站发布每天发布这么多文章实际上有很多文章是转载来的,如果能够自动的将别人网站的文章抓过来,编辑打勾就可以直接发布效率就高的多了,于是各种抓站系统又成了CMS的标准配置。这里面值得称道的是donews的CMS系统,看到一个喜欢的网页,直接右键保存,系统可以自动分析html页面,并将关键数据取出,点一下确定就可以发布,实在是非常方便。而且可以自动取出关键字,并在文章之间根据关键词形成关联。 在这个过程中模板系统也逐渐产生了。以前的模板多是由技术人员手工开发。例如做一个首页,页面上各个区块的逻辑确定后都手动写代码,写死后很难改变。这样子倒没有错误,只是模板制作效率非常低下,新做或修改模板非常麻烦。在这个条件下就促使开发人员将模板做进一步处理。模板一般会被切分成碎片,碎片有几种类型,文本,图片,广告,列表。前面三种都是简单的对html进行分块处理,列表是动态的功能,负责在发布的时候动态的组织内容。这样子就很方便了,可以很快的做出一个模板,加上模板复制的功能就更加如虎添翼。 目前新浪的CMS是C++做的,重点强调数据结构的丰富,功能非常强大,评论系统做的也不错。评论系统做的最好的是网易,它的延伸阅读做的也不错。Sohu的图库做的不错。 以后CMS发展的方向我认为很大的一方面是内容的相关组织。目前各大网站最常用的提高访问量的招数就是在文章页底添加相关链接,一般是比较火暴的文章和图片,提升访问量非常显著。但这种方式比较死板,每篇文章下面的内容都一样,用户点了一次就不会点第二次。理想的效果是在文章下面添加相关的文章,而且不仅仅局限于CMS内部,应该将站外的相关内容都添加进去,只要用户觉得方便,别怕他不回来。 另外一个方向就是内容来源多样化。例如新浪的CMS,目前似乎只能对手发文章进行比较好的管理,对于iask的内容,对于论坛的内容都是手动的编辑,目前似乎还能满足需要,但从长期来看,是肯定要变的。如果没有RSS的出现,内容来源的多样化还是一句空话,RSS出现后,站内的内容,站外的内容都可以通过RSS来传递。 互联网的入口开始是门户,后来成了搜索引擎,就是因为搜索引擎可以提供来源多样化的内容,一个网站再大也只是一个网站,做再多的频道也就是一个网站,无法满足用户对于多样化,个性化的需要。未来的入口是什么,现在还说不定,但肯定是要对用户的胃口,不能我给你什么,你就看什么,而是看谁能提供给我最想看的东西,让我最少的动脑动手。 我认为未来内容分化为两部分的趋势会逐渐显现出来。一部分提供底层的内容,博客服务提供商以及社区服务提供商会是主力,门户也是重要组成部分;另外一部分仅仅对内容进行组织,充当入口,只提供内容的链接,并不实质的存放内容。 Google的ig是一个例子,微软的Live站略中RSS Live也是重中之重,Yahoo最近也提供了个性化的门户,这些都是引子,慢慢的戏会越来越好看。 发文庆祝CMS完成,小小的展望一下未来,继续做事。

World

Skype的主要功能-Skype通讯协议分析(3)

Skype的功能主要可以分为:初始化,登录,用户搜索,呼叫建立与终止,媒体传输和状态消息。 1、初始化 第一次安装后,Skype会发送一段HTTP 1.1的请求给中央服务器,包括关键字”installed”以及所装Skype的版本号。以后的每次登录Skype都会向中央服务器发送一小段包含关键字”getlatestversion”的HTTP 1.1请求,检查是否有新版本的Skype。

World

Skype的主要组成部分-Skype通讯协议分析(2)

1、端口 在Skype的连接属性对话框中可以设置监听的端口号,在安装的时候Skype会随机的选择一个端口作为监听的端口,这一点与HTTP协议等不同,Skype没有默认的服务端口。同时,它还会打开对80和443端口的监听。80是常见的HTTP服务默认端口,而443则是HTTPS服务的默认端口。 2、主机列表(HC,Host Cache) 这里的主机指的是可以提供踏板及广播服务的Super Node(SN)。通常它被存储在注册表里的:HKEY_CURRENT_USER / SOFTWARE / SKYPE / PHONE / LIB / CONNECTION / HOSTCACHE 中.一般情况下,运行两天后,HC中会有约200个机器地址及对应的端口号。

World

Skype通讯协议分析(1)

晚上在看Salman A. Baset和Henning Schulzrinne写的《An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol》。因为Skype的通讯协议是不公开的,而且通讯内容是加过密的,这两位完全在实验的基础上对Skype的通讯机制进行分析,分析结果很有参考价值。 通过分析得出的结论主要有三个: 1、Skype的通话质量较MSN和Yahoo的即时通信工具要好; 2、可以无缝的在NATs和防火墙后使用; 3、安装使用起来确实非常简单。

World

awk学习笔记

awk是一种用于处理数据和生成报告的编程语言。 一般的使用格式是: awk ‘{pattern + action}’ {filenames} pattern指在每一行中进行匹配的条件,action指针对符合条件的行进行的操作,filenames是输入的文件名。 假设data文件中有以下数据: 1 donald 305 20050129 2 chin 102 20040129 3 mark 304…