`
162cm
  • 浏览: 52703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用web应用中的不均衡性重构你的技术细节

    博客分类:
  • php
阅读更多
前提:
Lamp架构

1.用户对准确度的要求是不一样的.银行会要求客户帐上的钱的数目永远是精确的,但是论坛的在线人数,贴子数没这个必要.每天有成千上成的贴子发表。谁会去对质?我们只半个小时算一个甚至每天算一次就行了.所以,应用中要是没加Cron,那就肯定不是一个好应用.想象一下awstats,每当你的老板让你给演示一下前一周的访问周数据时,它就嘎吱嘎吱地算上老半天,然后在你的老板快要睡着时IE终于弹出一个页:服务器超时…. 你就知道要把一些服务设为定时跑一次,而不是时时保持最新最准确了
2.瓶颈永远是先在CPU/内存/磁盘IO中的一个出现.他们很少是同时告急的.因此,针对这个设计一个.比如:某台服务器上CPU占用平均为60%左右,而内存占用是5%左右。那么我们可以预先猜测,CPU资源会首先占尽。由于日志显示占用CPU最多的是mysqld进程,说明mysql查询耗尽了 CPU.再查之,原来是贴子主题太多,一个表有上G大小,索引不当.
找到问题,于是马上做出改进.原来的URL已经优化成***.com/topic/10/10001.html,***.com/topic/12 /12001.html…这样的了,但其实后台是用rewrite的.而id从1到100,000的主题都因为已经太老,无人参与回复了,所以没必要每次都查库.马上写个脚本,将***.com/topic/1.html….***.com/topic/10/10001.html…这些页面都读下来,保存为web根下/topic/***/***.html文件。现在这些文件是实际存在的了,Apache会优先读这个静态文件,而不是适用 rewriterule了.
(注:我的apache 的rewrite规则是这样写的,这样文件找不到的时候会交给index.php来处理.

rewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
rewriterule . /index.php [L]

)
现在再看一看,mysqld占CPU是少了不了.但还是不够啊.咱们的内存还没有用上呢。才10%,不行.于是又有了办法:架上squid或是类似缓存服务,大量起用内存缓存,现在就好多了.内存,CPU都用上了.如果这时CPU使用率仍然领先内存,那咱们再启用mem_cache,不过启用 mem_cache后要改程序,改得好才能真正提交效率.
3.同是数据,用户名跟用户发的贴子内容这两个数据就不一样.一个咱们用varchar存在库中,另一个咱们得用text来存.这两个占用资源也大不一样啊.而且,贴子主题和发表用户名的读取的次数远大于贴子内容读取次数.这也是一个不均衡。于是基于这样的考虑,我把存储贴子数据表分开了。
现在的表是这样的:一个表存储用户名,发表时间,贴子标题等信息.另外建10个表,专门用来存储发贴内容.具体存在哪一个表,由这个主题贴ID的最后一位来定.
好了,由于发贴内容比较长,我把它分表(为了简化模型,是分表。实际有可能是分库,分服务器)了.而贴子主题由于要进行列表显示,搜索等操作,就没有分表.内容的查询效率是提高了。可是由于贴子主题要进行大量列表显示和搜索,且都在一个表中,还是慢啊.
不急,咱再分析.
a:这个表中存储的数据都比较短小.
b:这个表中常用来做列表显示,用户往往在论坛中是看了第一页标题,可能没什么吸引人的,于是又点了下一页…部分贴子会进去看一下内容.但是你见过用户一直点到第100页吗?而且,用户看贴子的量也绝对大于发贴子….除非他是供职于某论坛的版主….
好了,又总结出不均衡性来了.大多数情况下用户只看前100页,那咱们就把这100页数据拿出来,建一个内存表,再放一份.Mysql内存表有一个限制, 就是字段不能超过255字节,但咱们的这个表刚好符合.现在咱们写数据时主题表和存主题的内存表中都写入一次,读数据的时候,就从内存表中读…这样是不是快很多了?
分享到:
评论

相关推荐

    基于Java Web的智能二维码门禁管理系统(本科毕业论文+毕业设计).zip

    1. **Java Web技术**:Java Web是使用Java语言进行Web应用程序开发的技术集合,包括Servlet、JSP、JavaServer Faces (JSF)等。在这个项目中,Java Web技术主要负责处理HTTP请求,动态生成响应,以及与后端数据存储的...

    使用haproxy、php、redis和mysql支撑10亿请求每周架构细节.docx

    这样的设计导致了一个长期维护的噩梦——随着业务的发展,某些代码需要更新,而这种更新会导致各个应用之间出现业务逻辑上的不一致性,进而迫使开发人员在所有Web应用上进行相同的修改。 为了解决这些问题,首先...

    tcp迁移报告tcp迁移报告

    - 由于现代Web应用中越来越多地使用持久连接(Persistent HTTP,简称P-HTTP),传统的一次性连接方式已经不能满足需求。 - **持久连接协议(P-HTTP)概述** - P-HTTP允许客户端与服务器之间维持一个长时间的连接,...

    基于JavaEE技术平台婚介系统的开发与设计 (1)-论文.zip

    JavaEE(Java Platform, Enterprise Edition)是Java平台的一个版本,专为开发企业级应用而设计,提供了一个框架来创建分布式、多层的Web应用程序。 【描述】描述中的"(1)-论文.zip"表明这是一个系列中的第一部分,...

    基于ASP的CITMS公司客户信息与追踪管理系统 v3.0.zip

    综上所述,"基于ASP的CITMS公司客户信息与追踪管理系统 v3.0"是一个利用ASP技术构建的动态Web应用,它集成了客户信息管理、追踪系统以及各种ASP特性,为企业提供了高效、安全的信息管理解决方案。通过深入理解ASP的...

    tomcat技术展望

    根据提供的信息,“Tomcat技术展望”这一主题似乎缺乏具体细节,但从标题和描述来看,我们可以推测讨论的重点可能在于对Tomcat服务器未来发展方向和技术演进的一些预测与分析。下面将基于这个假设来展开相关的知识点...

    行业分类-设备装置-基于Tuxedo、.net及Oracle三层架构开发平台的优化配置方法.zip

    综上所述,基于Tuxedo、.NET及Oracle的三层架构开发平台的优化配置方法是一个综合性的技术挑战,需要考虑多个层面的细节。通过合理的配置和持续的优化,可以实现设备装置等行业高效、可靠的软件系统。

    go web编程

    - **Session 管理技巧**:确保 Web 应用的安全性和可靠性。 #### 七、文本文件处理 **7.1 XML 处理** - **XML 解析器**:如 `encoding/xml` 包。 - **DOM 和 SAX 模型**:两种不同的解析方式。 - **自定义 XML ...

    基于JSP的网上考试系统

    【基于JSP的网上考试系统】是一个典型的Web应用程序,它使用Java Server Pages(JSP)技术来构建一个在线测试平台。这个系统允许管理员发布试题,考生可以在线答题并提交,系统自动评分,提供成绩反馈。下面将详细...

    whyESB.pdf

    SOA的实施通常借助于Web服务技术,这使得不同系统之间可以轻松地共享和重用功能组件,无需了解底层实现细节。这种架构提供了以下几个显著的优势: 1. **灵活性与可扩展性**:SOA允许企业根据业务需求的变化快速调整...

    The.Definitive.Guide.to.symfony.Jan.2007.pdf

    - **挑战与解决方案**:针对每个案例中的特定挑战,提供了解决方案和技术细节。 #### 十、未来展望 - **技术趋势**:预测了未来几年内可能影响Symfony发展的技术趋势。 - **社区发展方向**:探讨了Symfony社区未来...

    性能优化面试必备.zip

    此外,理解浏览器的工作原理,如渲染流程、DOM操作的影响,以及如何利用Web Workers进行并行处理,也是前端面试的重要内容。 6. **代码优化**:编写高效、简洁的代码是基础。了解算法复杂度,熟练运用设计模式,...

    淘淘商城视频源码

    ### 淘淘商城视频源码相关知识点 ...通过深入研究其源码结构和技术实现细节,不仅可以学到先进的开发技巧,还能积累宝贵的项目经验。无论是对于初学者还是有一定基础的技术人员来说,都具有很高的参考价值。

    iWebIM_1.0Beta2_Manual.zip_WEB开发_PHP_

    1. **Web即时通讯基础**:即时通讯(IM)技术在现代互联网应用中扮演着重要角色,它允许用户实时交换消息,提供了一种快速的沟通方式。iWebIM利用WebSockets或长轮询等技术实现了浏览器端的即时通讯,这些技术允许...

    Uplynk迁移

    这个过程涉及到多个关键步骤和技术细节,包括数据迁移、代码调整、接口兼容性和性能优化等。 首先,我们需要理解PHP在Uplynk迁移中的角色。PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。如果Uplynk的...

    tshirt-server

    综上所述,"T恤服务器"项目是一个使用Python构建的Web应用程序,可能涉及Web框架、RESTful API、数据库交互、前端开发、安全性、部署与运维等多个方面的知识。项目的具体实现细节将取决于项目规模、团队技能和业务...

    系统架构师教程.pdf

    - 技术可行性、经济可行性等。 - **7.2.2 成本效益分析** - 投资回报率等财务指标的计算。 - **7.2.3 可行性分析报告** - 报告的撰写格式与内容。 - **7.3 方案的制订和改进** - 不断优化项目计划以达到最佳...

    Java面试考核目标.docx

    - 高级:具备安全性和性能优化意识,在实际工作中应用过HTTPS、CORS等技术。 - 资深/专家:能够评估不同API设计模式(如GraphQL)适用场景,并进行性能调优。 #### 三、专业广度 1. **各种算法** - **考核点**...

    back

    在"团契"的描述中,尽管没有明确的技术细节,我们可以将其理解为一个团队协作的项目,可能是一群开发者为了共同的目标——比如构建一个Web应用——而合作。在JavaScript的世界里,团队协作往往涉及代码组织、版本...

Global site tag (gtag.js) - Google Analytics