【问题标题】:Techniques for writing a scalable website编写可扩展网站的技术
【发布时间】:2023-03-14 08:52:01
【问题描述】:

我是网站可扩展性领域的新手。您能否向我推荐一些使网站可扩展到大量用户的技术?

【问题讨论】:

    标签: php mysql scalability


    【解决方案1】:
    1. 在高负载下测试您的网站。
    2. 监控所有统计数据
    3. 找到瓶颈
    4. 修复瓶颈
    5. 回到1

    祝你好运

    【讨论】:

      【解决方案2】:

      您可能想查看此资源-highscalability.com

      【讨论】:

        【解决方案3】:

        使用可靠的 OOP 技术开发您的网站。您将需要您的站点是模块化的,因为并非所有的性能瓶颈在开始时都是显而易见的。随着流量的增加,准备好重构您网站的某些部分。我写的第一句话将帮助您更轻松,更安全地完成它。另外,使用测试驱动开发,因为重构意味着新引入的错误,而好的 TDD 可以在它们投入生产之前很好地捕捉它们。
        尽可能将客户端代码与服务器端代码分开,因为如果您的网站流量证明这一点是合理的,它们可能由不同的服务器提供服务。
        阅读文章(例如阅读 YSlow 技巧)。

        GL

        【讨论】:

          【解决方案4】:

          查看 Rasmus Lerdorf(PHP 的创建者)的 this talk

          特别是第 8 页及以后。

          【讨论】:

            【解决方案5】:

            如果您希望您的网站能够扩展至超出单台服务器的能力,则需要仔细规划。设计使以下内容成为可能:-

            • 使您的数据库可以位于单独的服务器上。这通常不会太难。
            • 确保您的所有静态内容都可以移动到 CDN,因为这通常会减轻您的服务器的大量负载。
            • 准备好在硬件上花很多钱。更多 RAM 和更快的磁盘有很大帮助。
            • 当您需要将数据库或 php 从单个服务器拆分到多个服务器时,这会变得更加困难,因此请优化所有内容,包括代码、数据库架构、服务器配置以及您能想到的任何其他内容尽可能拖延最后一步。

            除此之外,您所能做的就是对您的网站进行压力测试,找出瓶颈所在并尝试设计它们。

            【讨论】:

            • 同意,我只想补充一点,缓存可能是您在创建大型网站时应该做的第一件事。
            • 是的。确保 MySQL 的缓存功能设置良好,并为您的代码使用强大的缓存。其他答案中提到的几个都很好。
            【解决方案6】:

            非常相似:How Is PHP Done the Right Way?

            可扩展性不是一个小问题,而且肯定比一个问题所能合理涵盖的内容更多。

            例如,对于某些类型的应用程序,连接(在 SQL 中)无法扩展,这会带来各种缓存和分片策略。

            Beanstalk 是高性能 PHP 站点中的另一个可扩展性和性能工具。和 memcache 一样(不同的类型)。

            【讨论】:

              【解决方案7】:

              按重要性排序:

              1. 如果您运行 PHP,请使用类似 APC 的操作码缓存。 (这一点非常重要,可以内置在下一代 PHP 中。)

              2. 使用YSlowGoogle Page Speed 来识别瓶颈。 (这将揭示影响客户端和服务器性能的网站结构问题。)

              3. 确保您的 Web 服务器为静态内容(图像、Javascript、CSS)发送正确的 Expires 标头,以便浏览器可以正确缓存它。 (YSlow 也会就此发出警告。)

              4. 使用 HTTP 加速器,例如 Varnish。 (This picture 说明了一切——他们已经有一个 HTTP 加速器。)

              【讨论】:

                【解决方案8】:

                许多人提到了用于识别瓶颈的工具,这当然是必要的。你不能在不知道哪里慢的情况下花时间加快速度。但是您需要知道的另一件事是您的目标可扩展性在哪里。如果 HR 部门的三个人都在使用它,那么花几个月的时间让你的网站扩展到与 Twitter 相同的用户数量是否物有所值?在产品需求中,您是否有已知的事务率、响应延迟或用户数量?如果是这样,请使用您的优化策略来定位这些数字。如果没有,找出那些,然后再将性能老鼠赶下洞。

                【讨论】:

                  【解决方案9】:

                  可扩展性的最大问题通常是共享资源,例如 DBMS。问题的出现是因为 DBMS 通常无法放松一致性保证。

                  如果您想在使用 MySQL 之类的工具时提高可扩展性,则必须更改架构设计以放松一致性。

                  例如,您可以分离您的数据库架构,让您的规范化数据模型用于写入,并为 90% 的读取操作提供一个复制的只读非规范化部分。只读数据可以分布在多个服务器上。

                  提高数据库可扩展性的另一种方法是对数据进行分区,例如将数据分离到每个部门的数据库中,然后在 ORM 或 DBMS 中聚合它们。

                  【讨论】:

                  • 在 ORM 层聚合数据引入了应用程序级别的复杂性,这对于 Ruby 和 PHP 等语言可能会很慢。另外,它更难管理。
                  【解决方案10】:

                  除了其他建议之外,请考虑将您的网站分成几层,如multitier architecture。如果操作正确,您可以每层使用一台服务器。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-29
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-21
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-11-11
                    相关资源
                    最近更新 更多