前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何构建可扩展的应用程序

如何构建可扩展的应用程序

作者头像
February
修改2018-11-20 17:22:57
1.4K0
修改2018-11-20 17:22:57
举报
文章被收录于专栏:技术翻译技术翻译

所以你有一个很棒的主意。而且你有来自大学的朋友可以帮助你开始构建你的应用程序。您也可以从早期采用者那里获得很好的反馈。所以你做任何人都会做的事。启动你的应用!

前几周一切都很完美。经验很棒。你的观众坚持你。最重要的是,您的用户群呈指数级增长。

但后来发生了一些奇怪的事情。用户忠诚度开始下降。人们正在卸载您的应用。你仍然在快速成长,但是流失太高了!怎么了?

您查看分析报告并注意页面加载时间很长。请求正在超时。该应用程序不断崩溃,数据库非常火爆。不是你想要的点亮。

但你的测试是积极的。你曾计划好一切。出了什么问题?你的应用程序无法扩展!

可扩展性(从技术角度来看)经常被忽略。这就是开始造成诸如糟糕的用户体验,高维护成本等等问题的原因。因此,在我帮助您弄清楚如何使您的应用程序更具可扩展性之前,让我来定义实际的可扩展性。

什么是可扩展性?

在我看来,可扩展性是以经济有效的方式保持良好的用户体验,而不管用户的数量。

您可能已经注意到,可扩展性有3个部分。最重要的是保持良好的用户体验。当然,您的应用可以扩展到数百万用户。但如果经验不够好,你甚至可能达不到那个规模。整个可扩展性点是为了确保您的用户体验完好无损,因为在一天结束时,重要的是您的用户对您的应用感到满意。没有人关心技术。

第二部分确定了背景。无论活跃用户数量多少,您的应用都需要保持用户体验。如果此数字非常高,则会对后端系统造成相当大的负担。您的目标应该是让您的系统独立于此号码工作

最后,这是我们最关心的事情:金钱!因此,我们假设无论活跃用户数量多少,您都能保持用户体验。但是以什么代价?如果您的成本上升速度超过用户群,则无法将系统称为可扩展。理想情况下,您应该能够以更低的成本支持更多用户

棒!现在,我们已经清除了可扩展性的定义,让我们深入了解制作可扩展应用程序的技巧。

制作可扩展应用的提示

传统的扩展需求是通过增加服务器资源来处理的。这种方法称为“扩展”。这种方法有许多局限性。在这篇文章中,我将专注于“扩展”。也就是说,添加新的服务器和资源以适应负载的增加。

1)选择正确的技术

我很确定你看到了这一个。可伸缩性并不是事后的想法。它需要从最初的设计中包含在过程中。这从使用正确的技术开始。

编程语言

你做的第一个选择是编程语言。是的,您选择的语言对可伸缩性有很大影响。

例如,Elixir支持开箱即用的基于actor的并发。这意味着即使在不同的物理机器上,Elixir进程也可以相互通信。作为开发人员,您无需担心底层网络或用于通信的协议。多么酷啊?

对如何选择下一种编程语言感到困惑?这是一篇可以帮助你的文章

数据库

第二个选择是您的数据库。您使用的数据库是否考虑了可扩展性?有一整套新的NoSQL数据库,其唯一目的是扩展。

他们确实会进行权衡取舍。因此,您需要为作业选择正确的数据库。甚至可能为不同的工作负载使用不同的数据库。

通讯

随着微服务变得越来越流行,您需要确保服务之间的通信通道也是可扩展的。让他们直接对话可能不是一个非常可扩展的解决方案。

您可能不得不使用消息传递总线或类似的东西来构建松散耦合的系统。这有助于您独立扩展服务。

Nats.io是一个非常棒的系统,您可以采用它来构建微服务。它最近被CNCF接受了孵化项目

2)避免单点故障

单点故障意味着什么?让我通过问你一个问题回答这个问题。特定资源(例如服务器,网络资源)的故障会导致整个应用程序崩溃吗?如果运行数据库或后端代码的服务器失败会发生什么?您的应用仍然可用吗?如果没有,那就是你的单点失败。

所以你怎么避免这个?简单。拥有一切的多个副本。在多个服务器上运行数据库。许多支持开箱即用的复制。一个很好的例子是MongoDB。在多台服务器上运行后端代码。负载平衡器可以真正帮助你。

我知道说起来容易做起来难。我几乎没有触及表面。但总而言之,横向扩展资源是关键

3)将逻辑推送到客户端

等等,什么?不是那样吗?并不是的。所以你在后端编写的PHP,.Net或Nodejs代码就是实际的逻辑。这种方法的问题在于,每次客户端发出请求时,您的服务器都必须工作。当多个这样的客户开始一起提出请求时,我们遇到了问题。

但这里还有另一个问题。我们不能相信客户。如果客户端遭到入侵并覆盖您移植的逻辑,该怎么办?大问题吧?所以这里的诀窍是尝试取得平衡。只能移植您可以验证的逻辑。

有很多工具可以帮助你在这里。其中之一是像Space Cloud一样的后端即服务(BaaS)。BaaS还可以帮助您简化安全方面。您可以在这篇文章中了解有关前端,后端和BaaS的更多信息

将逻辑推送到客户端可以帮助您减少服务器负载。这反过来将有助于使您的应用程序更具可扩展性。记住每个CPU周期都很重要。

4)缓存结果

你如何执行客户端请求?每次客户要求时,您是否点击了主数据库?这不是一个可扩展的设计,特别是如果您的数据的某些部分经常被读取。

以Twitter为例。当名人推文时,人们会发疯。查看该推文的人数可能会使您的数据库崩溃。这里是缓存可以帮助您的地方。

Redis这样的专用内存数据库可以以闪电般的速度执行读写操作。因此,在Redis等商店中存储“热门数据” 可以帮助您在峰值负载期间保持这种规模

但这并不意味着您将缓存所有数据。这是因为RAM比磁盘空间更昂贵。这会增加您的成本。仅缓存热门结果或需要大量计算的结果。请记住,缓存会影响数据的新鲜度。

5)无状态

您需要保持您的API无状态。在每个请求中,客户端应提供满足该请求所需的所有信息。这就是REST API所基于的概念。

在所有情况下都可能无法做到这一点。有时您可能需要查询数据库和其他服务。没关系!

您可以开始删除您可能存储在服务器上的任何会话数据。这是有问题的,因为如果服务器出现故障,您将丢失该数据并且该客户端是孤立的。

人们可能会建议您使用Redis来存储会话,但这也会带来缩放限制。最好的选择是使用JWT令牌。这是迄今为止处理会话数据最具扩展性的方式。只需确保您的令牌不会变得太大。在这种情况下,Redis是你最好的朋友。

结论

因此,我们了解了可扩展性的含义以及它如何影响您的业务。希望我在这里提供的提示很有帮助。如果做得好,它可以为您节省数百万美元。

原文标题《How to Build Scalable Apps》

作者:Noorain Panjwani

译者:February

不代表云加社区观点,更多详情请查看原文链接

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是可扩展性?
  • 制作可扩展应用的提示
    • 1)选择正确的技术
      • 编程语言
      • 数据库
      • 通讯
    • 2)避免单点故障
      • 3)将逻辑推送到客户端
      • 4)缓存结果
        • 5)无状态
        • 结论
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档