警告:您是否正在使用 Docker 构建自己的 PaaS?

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

容器化很棒……它是革命性的。但是,为了使其正常工作,您还需要所有这些其他组件。作为开发人员,您不想关心哪个 VM 或网络……或任何这些小细节。如果您在企业的开发团队中推出软件,您真的不必担心他们。您应该担心的是让您的应用程序走出门外——确保它可以扩展,确保它可用,并确保它安全,这些是您应该关注的事情。

我在 ContainerCamp 2015 的 演讲中讨论了这些问题以及更多内容。以下是我的会议的文字记录和完整视频的摘录。

虽然您想让容器为您的组织所用,但除了容器之外还有一些您需要了解的问题:

记录

在过去(比如几十年前),日志记录很容易。在 Linux 机器上,你有一个发送日志的应用程序,你可以使用所有这些很棒的工具,如 grep、awk 和 Perl 来检查你的日志并生成所有这些东西。那是在真正的旧时代。

然后当我们有客户端/服务器时突然变得有点困难......这意味着我们在各种系统的整个网络上到处都有日志。我们必须捕获和收集所有细节并确保它们都准备就绪,确保到处都有代理,确保代理不会崩溃,并确保磁盘不会变满。

当我们进入云端时,它只会变得更加复杂。现在,我已经获得了这些在我的整个网络中启动和停止的临时服务(谁知道它们在哪里),我必须确保捕获这些服务的日志。然后我们必须处理日志之间的关联,日志到数据库,它们如何与发生在前端和发生在中间层的事情相关联?或者更有趣的是,在构成我的整个应用程序的数百个微服务中。虽然日志记录变得越来越困难,但开发人员真的不应该花任何时间处理日志记录的复杂性。在我的职业生涯中,我知道我花了太多时间编写日志系统并确保它们持续运行。但这不是我应该做的,也不是我付钱去做的。我应该发布软件,而不是摆弄日志。

缩放

扩大应用程序非常重要。几乎所有时间都在发生的典型模式是,初创公司对应用程序有一个很酷的想法。他们开始构建它,制作原型,然后开始获得投资。然后大约在发货前三个月,有人说,“你知道吗?我们真的应该确保这个东西可以扩展。”然后他们开始做一些规模测试,当事情开始失败时,他们必须回到绘图板上。这不是正确的方法。从你写一行代码的第一秒起,你就应该扩展你的应用程序(我也指服务或微服务)。换句话说,如果你开始你的应用程序,就像你可能应该使用“hello world”应用程序一样,在部署 10 秒后,你应该将其扩展到数千个用户。从一开始就这样做。大多数人今天不这样做是因为他们有所有这些很酷的想法想要实现,但更好的方法是从第一天开始扩展它,然后随着你的应用程序的发展,你一直在进行扩展测试通过整个交付管道,以确保它在每时每刻都能支持它永远需要支持的所有用户。

即时回滚和版本控制

即时回滚和版本控制与微服务特别相关,因为您希望为您的服务提供此功能。对于微服务,一次运行多个版本的服务是很常见的,如果不是这样,则可以在情况发生变化和发现问题时来回回滚这些版本。我的意思是你有 Docker(这很棒),我们在所有东西中都有这些容器,但仍然要实际管理它们的版本控制和回滚,零停机时间回滚和前滚,诸如此类的事情需要很多努力,很多时间,大量的知识和专业知识。

按需/自助服务

按需、自助服务,是云计算的重要承诺之一。理想情况下,开发人员应该能够访问所需的所有资源,而无需提交服务台票证。它一直让我感到惊讶:当我第一次开始从事这项工作时,我发现这些公司会告诉我需要一个月或两个月的时间来获得 VM 配置。我认为这太疯狂了(我已经习惯了两周),而且我最近遇到了金融行业的公司,他们说他们需要六个月才能配置 VM。他们的 IT 部门必须处理 120 张票才能启动虚拟机……这仍然让我感到困惑。这显然是错误的方法,因此您希望尽可能多地启用按需自助服务。同样,Docker 非常适合所有这些事情,但您希望在其之上获得另一层以启用所有这些。

监控

另一个重要的是监控。最近与 David Farley(撰写了关于 持续交付的 书)的网络研讨会......说持续交付的整个概念是基于科学方法的——为了有意义,它必须被衡量。软件也是如此。如果你能衡量它,你就可以大大提高你关心的所有其他事情的可靠性和可扩展性。但是将监控连接到您的应用程序需要大量工作,以确保其可靠和准确。通常我们身处杂草之中......我们正在处理管道,我们正在处理所有这些不能直接适用于构建软件的事情,这是他们付钱给我做的,而且真正“这个”生产牙膏的公司”应该这样做。不要把所有的时间都花在杂草上。

还有很多杂草:

  • 弹性缩放
  • 资源缩放
  • 与基础设施的整合
  • 多节点集群配置和管理
  • 高可用性
  • 单点登录等安全问题
  • 多租户和隔离
  • 监控
  • 记录
  • 路由
  • 负载均衡
  • 服务供应和自动布线
  • 服务发现
  • 即时回滚和版本控制
  • 服务命名和 URL 映射
  • 多种语言支持
  • 认证服务整合
  • 一致性
  • 配器

您可以使用 Docker 容器自己构建这一切,但为什么呢?当您可以使用 PaaS 时,为什么要构建它?不要误会我的意思,我们是 Docker 的忠实粉丝。我们已经看到使用 Docker 和容器化带来的许多非常强大的好处。自 2013 年以来,我们一直在 Stackato 中使用 Docker,并且是第一个与 Docker 一起发布的商业产品(当然除了 dotCloud 之外)。最近,随着 Stackato 3.6 的发布,我们允许用户将自己的 Docker 镜像直接部署到 Stackato。

容器功能强大,但您必须处理上面提到的大量杂草。这意味着您正在有效地构建自己的 PaaS,并从专注于自己的业务中抽出时间。