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

Related

IBM: Θύμα χάκερς από ξένες κυβερνήσεις την προηγούμενη δεκαετία

Για συγκάλυψη των παραβιάσεων που υπέστη την προηγούμενη δεκαετία από ξένες κυβερνήσεις, κατηγόρησε την IBM ενα πρώην στέλεχος της εταιρείας στον τομέα της κυβερνοασφάλειας. Σε μια αγωγή που αποκαλύφθηκε αυτή την εβδομάδα -και την οποία ανέφερε πρώτα το Bloomberg – , αλλά κατατέθηκε το 2020, ο Γουίλιαμ Μπάρλοου, ο οποίος ήταν αντιπρόεδρος της IBM στον τομέα

Nvidia: Νέα κίνηση στα AI PC, από τα data centers στα laptop

Η Nvidia ανοίγει ένα νέο μέτωπο στη μάχη επικράτησης της τεχνητής νοημοσύνης, επιχειρώντας να μεταφέρει μέρος της υπολογιστικής ισχύος από τα data centers στους προσωπικούς υπολογιστές. Η αμερικανική εταιρεία εισέρχεται στην αγορά των τσιπ για AI PCs με το νέο RTX Spark, σε μια κίνηση που τη φέρνει αντιμέτωπη με ισχυρούς ανταγωνιστές όπως η Apple

Τεχνητή νοημοσύνη: Πώς εντείνει τους κινδύνους στην ασφάλεια των επιχειρήσεων

Η ταχεία υιοθέτηση της τεχνητής νοημοσύνης δημιουργεί νέα και κρίσιμα κενά στην ασφάλεια cloud για τις επιχειρήσεις, σύμφωνα με την έκθεση Cloud Security 2026: Securing the AI Transformation της Check Point. Η έρευνα καταγράφει ότι, ενώ το 77% των οργανισμών έχει αναβαθμίσει τη στρατηγική ασφάλειας cloud ως απάντηση στο AI, μόλις το 26% θεωρεί ότι

Schneider Electric: Νέα μεγάλης κλίμακας επένδυση σε υποδομές AI

Η Schneider Electric και η Motivair by Schneider Electric ανακοίνωσαν την επιτυχή σταδιακή παράδοση λύσεων υποδομής AI αξίας άνω των 290 εκατομμυρίων δολαρίων για το ταχέως αναπτυσσόμενο data campus Lake Mariner της TeraWulf στις Ηνωμένες Πολιτείες. Το έργο αφορά ένα συγκρότημα data center ισχύος 750 MW στο Μπάφαλο της Νέας Υόρκης και εντάσσεται στην αυξανόμενη

Sparkle και GÉANT ενισχύουν τη διεθνή συνδεσιμότητα στην Ανατολική Μεσόγειο

Η Sparkle και το GÉANT ενισχύουν τη συνεργασία τους με νέες στρατηγικές διαδρομές χωρητικότητας στην Ανατολική Μεσόγειο και την Αφρική, αλλά και με τη διασφάλιση προηγμένων υπηρεσιών cloud για την πανευρωπαϊκή ακαδημαϊκή κοινότητα έως το 2030. Η πρωτοβουλία εντάσσεται σε ευρωπαϊκά προγράμματα και αποσκοπεί στην ενίσχυση της συνδεσιμότητας για την παγκόσμια επιστημονική και ερευνητική κοινότητα.

Η ESET συμμετέχει σε πρωτοβουλία του ΝΑΤΟ για την κυβερνοάμυνα

Η ESET ανακοίνωσε τη σύναψη στρατηγικής συνεργασίας με το ΝΑΤΟ, μαζί με τη Microsoft και την Palo Alto Networks, σε μια πρωτοβουλία που στοχεύει στην ενίσχυση της συλλογικής ανθεκτικότητας απέναντι στις υφιστάμενες και αναδυόμενες κυβερνοαπειλές. Η ανακοίνωση έγινε στο πλαίσιο της Διεθνούς Διάσκεψης για τις Συγκρούσεις στον Κυβερνοχώρο (CyCon), η οποία πραγματοποιήθηκε στο Ταλίν της

AI και αγορά εργασίας: Κύρια αιτία απολύσεων στις ΗΠΑ – Τι δείχνουν νέα στοιχεία

FORTUNE GREECE 06/06/2026, 20:02 SHARE Η τεχνητή νοημοσύνη αναδεικνύεται για πρώτη φορά ως η βασική αιτία απολύσεων στις Ηνωμένες Πολιτείες. Σχεδόν το 40% των απολύσεων τον Μάιο στις ΗΠΑ αποδόθηκαν στην τεχνητή νοημοσύνη. Οι συνολικές περικοπές θέσεων εργασίας αυξάνονται για τρίτο συνεχόμενο μήνα. Παρά τις απολύσεις, η αγορά εργασίας παραμένει ισχυρή, αλλά με χαμηλή δημιουργία

Viral ατύχημα με ρομπότ στην Κίνα: Χτύπησε ανήλικο θεατή

FORTUNE GREECE 06/06/2026, 19:31 SHARE Ένα απρόσμενο περιστατικό σημειώθηκε σε τουριστική ατραξιόν στην επαρχία Σιντζιάνγκ της Κίνας. Το παιδί βρισκόταν εκτός της ασφαλούς ζώνης των θεατών και εντός της περιμέτρου δράσης του μηχανήματος. Η μητέρα του θύματος κατήγγειλε την έντονη καθυστέρηση του προσωπικού να παρέμβει μετά το συμβάν. Ένα ρομπότ χτύπησε στο στήθος έναν ανήλικο

Ημιαγωγοί: Απώλειες 1,2 τρισ. δολ. για τις μετοχές των εταιρειών chip στη συνεδρίαση της Παρασκευής

Η δύσκολη συνεδρίαση της Παρασκευής για τη Wall Street ήταν πραγματικά καταστροφική για τον κλάδο των ημιαγωγών καθώς είχε τη χειρότερη πτώση του από τον Απρίλιο του 2025, διαγράφοντας πάνω από 1 τρισεκατομμύριο δολάρια σε χρηματιστηριακή αξία. Η ζημιά είναι μεγάλη, αλλά δεν ήταν ομοιόμορφα κατανεμημένη. Παρά το γεγονός ότι ο κλάδος έχασε περίπου 1,2

Salesforce: Ισχυρή αύξηση εσόδων και κερδοφορίας στο α’ τρίμηνο

Η Salesforce ανακοίνωσε αποτελέσματα-ρεκόρ για το πρώτο τρίμηνο του οικονομικού έτους 2027, επιβεβαιώνοντας τη δυναμική της στον χώρο του cloud λογισμικού και της τεχνητής νοημοσύνης. Η αμερικανική εταιρεία, που αυτοπροσδιορίζεται ως κορυφαία παγκοσμίως εταιρεία AI CRM, ολοκλήρωσε το τρίμηνο στις 30 Απριλίου 2026 με ισχυρή αύξηση σε βασικούς χρηματοοικονομικούς δείκτες. Ιδιαίτερα ενισχυμένη εμφανίστηκε η ζήτηση

Τεχνητή νοημοσύνη: Γιατί η σωφροσύνη, η αρχαία ελληνική αρετή, έχει μεγαλύτερη σημασία από ποτέ

Η αποστολή μηνυμάτων κατά την οδήγηση. To bullying στα μέσα κοινωνικής δικτύωσης. Η υιοθέτηση της τελευταίας θεωρίας συνωμοσίας. Η παρουσίαση έργου που έχει δημιουργηθεί από τεχνητή νοημοσύνη ως δικό σου. Αυτό μπορεί να μοιάζει με μια τυχαία λίστα κακών συνηθειών του 21ου αιώνα. Αλλά σύμφωνα με τον καθηγητή φιλοσοφίας Ross Channing Reed, όλα αυτά αποτελούν παραδείγματα

Διαδίκτυο: Τι αναζητούν τα παιδιά – Τα δεδομένα για την Ελλάδα

Η Kaspersky δημοσίευσε την ετήσια έκθεσή της για τα ψηφιακά ενδιαφέροντα των παιδιών, αναδεικνύοντας μια αξιοσημείωτη αλλαγή στις διαδικτυακές τους συνήθειες. Τα εργαλεία τεχνητής νοημοσύνης, που χρησιμοποιούνται ως βοηθοί για τις σχολικές εργασίες, συγκαταλέγονται πλέον, μαζί με τα μέσα κοινωνικής δικτύωσης και τα βιντεοπαιχνίδια, στις δημοφιλέστερες κατηγορίες αναζητήσεων στη Google, εκτοπίζοντας τον περσινό πρωταγωνιστή, τις

Share

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的内存。

爸爸:儿子,不行,即使是你过生日也不行。

时至今日,大内存的成本已经完全可以承受。Google使用了大量的PC机建立集群用于数据处理,而我一直觉得,使用大内存PC可以很低成本的解决前端甚至中间的负载问题。由于PC硬盘寿命比较短,速度比较慢,CPU也稍慢,用于做web前端既便宜,又能充分发挥大内存的优势,而且坏了的话只需要替换即可,不存在数据的迁移问题。

下面就是应用的设计。应用在设计的时候应当尽量的设计成支持可扩展的数据库设计,数据库可以动态的添加,同时支持内存缓存,这样的成本是最低的。另外一种应用设计的方法是采用中间件,例如ICE。这种方案的优点是前端应用可以设计的相对简单,数据层对于前端应用透明,由ICE提供,数据库分布式的设计在后端实现,使用ICE封装后给前端应用使用,这路设计对每一部分设计的要求较低,将业务更好的分层,但由于引入了中间件,分了更多层,实现起来成本也相对较高。

在数据库的设计上一方面可以使用集群,一方面进行分组。同时在细节上将数据库优化的原则尽量应用,数据库结构和数据层应用在设计上尽量避免临时表的创建、死锁的产生。数据库优化的原则在网上比较常见,多google一下就能解决问题。在数据库的选择上可以根据自己的习惯选择,Oracle,MySQL等,并非Oracle就够解决所有的问题,也并非MySQL就代表小应用,合适的就是最好的。

前面讲的都是基于软件的性能设计方案,实际上硬件的良好搭配使用也可以有效的降低时间成本,以及开发维护成本,只是在这里我们不再展开。

网站架构的设计是一个整体的工程,在设计的时候需要考虑到性能,可括展性,硬件成本,时间成本等等,如何根据业务的定位,资金,时间,人员的条件设计合适的方案是件比较困难的事情,但多想多实践,终究会建立一套适合自己的网站设计理念,用于指导网站的设计工作,为网站的发展奠定良好的基础。

初创网站与开源软件

前面有一篇文章中提到过开源软件,不过主要是在系统运维的角度去讲的,主要分析一些系统级的开源软件(例如bind,memcached),这里我们讨论的是用于搭建初创网站应用的开源软件(例如phpbb,phparticle),运行在Linux,MySQL,Apache,PHP,Java等下面。 创业期的网站往往采用比较简单的系统架构,或者是直接使用比较成熟的开源软件。使用开源软件的好处是搭建速度快,基本不需要开发,买个空间域名,下个软件一搭建,用个半天就搞定了,一个崭新的网站就开张了,在前期可以极大程度的节约时间成本和开发成本。 当然使用开源软件搭建应用也存在一些局限性,这是我们要重点研究的,而研究的目的就是如何在开源软件选型时以及接下来的维护过程中尽量避免。 一方面是开源软件一般只有在比较成熟的领域才有,如果是一些创新型的项目很难找到合适的开源软件,这个时候没什么好的解决办法,如果非要用开源的话一般会找一个最相似的改一下。实际上目前开源的项目也比较多了,在sf.net上可以找到各种各样的开源项目。选型的时候尽量应该选取一个程序架构比较简单的,不一定越简单越好,但一定要简单,一目了然,别用什么太高级的特性,互联网应用项目不需要太复杂的框架。原因有两个,一个是框架复杂无非是为了实现更好的可扩展性和更清晰的层次,而我们正在做的互联网应用范围一般会比开源软件设计时所考虑的范围小的多,所以有的应用会显得设计过度,另外追求完美的层次划分导致的太复杂的继承派生关系也会影响到整个系统维护的工作量。建议应用只需要包含三个层就可以了,数据(实体)层,业务逻辑层,表现层。太复杂的设计容易降低开发效率,提高维护成本,在出现性能问题或者突发事件的时候也不容易找到原因。 另外一个问题是开源软件的后期维护和继续开发可能会存在问题,这一点不是绝对的,取决于开源软件的架构是否清晰合理,扩展性好,如果是较小的改动可能一般不会存在什么问题,例如添加一项用户属性或者文章属性,但有些需求可能就不是很容易实现了。例如网站发展到一定阶段后可能会考虑扩展产品线,原来只提供一个论坛加上cms,现在要再加上商城,那用户系统就会有问题,如何解决这个问题已经不仅仅是改一下论坛或者cms就可以解决了,这个时候我们需要上升到更高的层次来考虑问题,是否需要建立针对整个网站的用户认证系统,实现单点登录,用户可以在产品间无缝切换而且保持登录状态。由于网站初始的用户数据可能大部分都存放在论坛里,这个时候我们需要把用户数据独立出来就会碰到麻烦,如何既能把用户数据独立出来又不影响论坛原有系统的继续运行会是件很头痛的事情。经过一段时间的运行,除非是特别好的设计以及比较好的维护,一般都会在论坛里存在各种各样乱七八糟的对用户信息的调用,而且是直接针对数据库的,这样如果要将用户数据移走的话要修改代码的工作量将不容忽视,而另外一个解决办法是复制一份用户数据出来,以新的用户数据库为主,论坛里的用户数据通过同步或异步的机制实现同步。最好的解决办法就是在选型时选一个数据层封装的比较好的,sql代码不要到处飞的软件,然后在维护的时候保持系统原有的优良风格,把所有涉及到数据库的操作都放到数据层或者实体层里,这样无论对数据进行什么扩展,代码修改起来都比较方便,基本不会对上层的代码产生影响。 网站访问速度问题对初创网站来说一般考虑的比较少,买个空间或者托管服务器,搭建好应用后基本上就开始运转了,只有到真正面临极大的速度访问瓶颈后才会真正对这个问题产生重视。实际上在从网站的开始阶段开始,速度问题就会一直存在,并且会随着网站的发展也不断演进。一个网站最基本的要求,就是有比较快的访问速度,没有速度,再好的内容或服务也出不来。所以,访问速度在网站初创的时候就需要考虑,无论是采用开源软件还是自己开发都需要注意,数据层尽量能够正确,高效的使用SQL。SQL包含的语法比较复杂,实现同样一个效果如果考虑到应用层的的不同实现方法,可能有好几种方法,但里面只有一种是最高效的,而通常情况下,高效的SQL一般是那个最简单的SQL。在初期这个问题可能不是特别明显,当访问量大起来以后,这个可能成为最主要的性能瓶颈,各种杂乱无章的SQL会让人看的疯掉。当然前期没注意的话后期也有解决办法,只不过可能不会解决的特别彻底,但还是要吧非常有效的提升性能。看MySQL的SlowQuery Log是一个最为简便的方法,把执行时间超过1秒的查询记录下来,然后分析,把该加的索引加上,该简单的SQL简化。另外也可以通过Showprocesslist查看当前数据库服务器的死锁进程,从而锁定导致问题的SQL语句。另外在数据库配置文件上可以做一些优化,也可以很好的提升性能,这些文章在网站也比较多,这里就不展开。 这些工作都做了以后,下面数据库如果再出现性能问题就需要考虑多台服务器了,一台服务器已经解决不了问题了,我以前的文章中也提到过,这里也不再展开。 其它解决速度问题的办法就不仅仅是在应用里面就可以实现的了,需要从更高的高度去设计系统,考虑到服务器,网络的架构,以及各种系统级应用软件的配合,这里也不再展开。 良好设计并实现的应用+中间件+良好的分布式设计的数据库+良好的系统配置+良好的服务器/网络结构,就可以支撑起一个较大规模的网站了,加上前面的几篇文章,一个小网站发展到大网站的过程基本上就齐了。这个过程会是一个充满艰辛和乐趣的过程,也是一个可以逐渐过渡的过程,主动出击,提前考虑,减少救火可以让这个过程轻松一些。

ICE-高效的中间件平台,牛刀小试

ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。前面我们提到过在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作,将基础对象操作和数据库操作封装在这一层,在业务逻辑层以及表现层(java,php,.net,python)进行更丰富的表现与操作,从而实现比较好的架构。基于ICE的数据层可以在未来方便的进行扩展。ICE支持分布式的部署管理,消息中间件,以及网格计算等等。 大道理讲完,言归正传,最近育儿网新增了不少新服务,服务间经常会需要相互调用数据,例如用户中心要取博客系统里的文章啊,论坛里发文后要在积分系统里增加用户积分啊。由于设计时这些服务仅仅基于统一的用户中心,服务间基本是独立的,所以要实现这些调用只能在每个服务上新增为其它服务提供服务的服务-_-!。这个时候有几个可选方案,我们开始选择了xml-rpc,基于http和xml的选程调用,用了一段时间,发现维护成本和访问性能都存在问题。 由于这些中间服务部署的时候是和各自所属的服务部署在一起的,对这些服务做整体的改动就非常困难,要维护起来就比较麻烦。另外由于是什么http和xml作为通信协议,由php实现业务逻辑,性能问题也很明显,而且这些http请求都会在http日志留下足迹,导致我们的日志分析很不精确。这个问题不是太大,但很郁闷,所以我们考虑使用ICE来解决这个问题,至于SOAP什么的就不考虑了,同样效率低下。 实现的过程还是比较顺利,花了三天的时间用c++实现了大部分常用的接口,服务端采用deamon的方式运行,错误日志记在syslog里(/var/log/messages),客户端PHP,编译进去了IcePHP,调用的方法很简单。现在还存在一些问题,运行的时候会异常退出,还需要一段时间来解决,暂时加了只狗看着,一旦进程里没了就重新启动。 既然要跨平台通讯,就涉及对象描述,ICE使用Slice来对结构,类,方法等进行定义。完了以后服务器端,客户端都按这个来调用和实现。ICE内置的Linux 下后台Deamon实现方案非常简单,只需要从Ice::Service里派生出一个类来,实现run方法,在这个方法里创建adapter对象,并在adapter对象里添加Servants,然后激活这个adapter就可以了,网络层的通信都由ICE接管了。由于是基于tcp/ip的直接通信,比更高层的http通信效率要高很多。 在客户端实现时,我们也碰到了一些小麻烦。一个是内置的$ICE对象用的时候有时需要用global声明,否则可能会出错,另外由于默认情况下Slice中struct对应到php的类型是一个类的实例,而不是一个数组,所以在赋值给页面的时候,smarttemplate以及其它模板系统中可能都会存在问题,可以通过修改模板系统的数据赋值显示代码解决。 我们做了一些性能的测试,同样运行1千次请求,使用xml-rpc实现需要28秒左右,使用ICE实现,只需要3秒多,性能的差距还是很大的,同时在这个过程中没发现有内存泄露的情况,效果还比较理想。 最后感慨一下,ICE是适合人类使用的中间件!

imageMagick图片处理工具

CMS系统的演进