对于整个Netflix OSS堆栈和部署,我是相当新的。 作为我目前知识水平的背景,我的主要职责是作为一名前端应用工程师。 但是,我喜欢事物的操作方面,所以我正试图为新项目build立一个新的部署策略和工具。
我们的目标
如果这样做的话,我们可以多花点时间,这样可以在将来为我们节省一些麻烦。
所以,根据这些方面,我一直在听播客,看OPS对话,阅读大量的博客文章,并根据我们的目标和我已经成为最佳实践的一些东西,我们已经开始制定一个计划Asgard,将我们的包装卷成一个jar子,然后把它卷成一个AMI。
我们把这一切都计划好了,并且喜欢使用Chef服务器和实时聚合实例的过程(由于我们的时间有限和厨师服务器工作stream程缺乏理解,我们觉得这很容易出错)。 然而,一位同事独自一人四处看了一下,觉得Elastic Beanstalk满足了我们的需求。
我已经研究过它,并用WAR文件和附加的RDS数据库创build一个testing环境。 事情似乎有效,我相信我们可以使用Jenkins通过AWS API自动部署到testing环境。 似乎很简单…也许太简单了。
我想知道的是,这是怎么回事? 如果Elastic Beanstalk如此简单而有效,那为什么不谈得更多呢? 我很难find关于这两种不同的部署策略的足够客观的观点和事实,所以我想我会问。
你使用Elastic Beanstalk吗? 如果是这样,为什么和什么因素导致这个决定? 你喜欢什么,不喜欢什么?
如果您不使用Elastic Beanstalk,但考虑到它,那么您使用的是什么,为什么不使用Elastic Beanstalk?
基于Elastic Beanstalk的SOA部署策略的优点和缺点是什么? 也就是说,Elastic Beanstalk能够与许多依赖于对方工作的小型应用程序协同工作吗?
除了尝试改进手动AWS实例之外,我还评估了Elastic Beanstalk以及其他AWS产品。 我select不使用它的原因是由于复杂的原因导致迁移我现有的应用程序,而不是提供本身。 问题在于,您对于服务器的应用程序部署/configuration没有太多的控制权。 如果你正在开发一个新的应用程序,那么现在不处理这些事情可能是有帮助的,如果你有一个现有的应用程序,那么更适合在Beanstalk模型中是一个挑战。
Beanstalk为Heroku和其他PaaS供应商提供了类似的产品,但对于那些只是专注于开发他们的应用程序的人来说,并没有什么好处。 您至less可以比其他PaaS供应商更多地确定虚拟化资源。
我遇到的问题与我的应用程序(s):
基于Git的部署 – 我喜欢他们,但我们的回购是1 + GB。 相当大推动定期。 这个回购还包含大约40个应用程序(这真的应该分裂),但这将需要一些时间。 上传任何types的包都可以,但是我们的大部分应用程序都需要大量的工作才能将其整合到一个包中。
与其他服务集成 – 从我所见到的Beanstalktypes假设你连接的任何东西都是单一的服务。 如果你的服务在ELB后面,但是我们是通过在每个应用程序服务器上运行的HAProxy来访问的独立节点,这个效果很好。 如果您将数据存储和其他服务作为单个端点运行,则应该没问题。
在我的评估中,我还包括OpsWorks和CloudFormation。 OpsWorks与现有的自动化如何为这些应用程序工作有类似的集成问题。 CloudFormation没有比Python脚本和厨师已经为我们照顾的更多。
我最终select使用AWS Autoscaling组,而不是使用Asgard提供的一些自动化function。 这是对现有configuration/应用程序代码的最小更改,为我们提供了我们正在寻找的优势,简化了通过AWS API提供的多个服务器的pipe理。
Elastic Beanstalk在您的应用程序中实施的限制非常有用。 您将不得不确保您的应用程序大部分是无状态的,为服务提供端点,并依赖于其他状态服务。 如果您尝试使可重用的独立服务在Beanstalk中的多个应用程序是一个很好的开始。
如果/当你想要更多的configuration时OpsWorks是一个很好的下一步。 预定义的angular色应该使转换变得容易起来,它提供了围绕Chef的自动化框架,以帮助协调多个服务器的configuration。
我确实看到失控的地步,但我不一定能看到规定的无国籍状态。 所有的eb真的是部署自动化,顺便说一句,真棒。 我确实看到了一个大型存储库的重点。 我认为一般情况下,将逻辑应用程序的function分离成独立的bean应用程序,然后在下面有“暂存”和“产品”环境,真的很不错。 我们有像上传器这样的模块环境,它并没有做太多的工作,理论上它增加了很多成本,但是你只需要使用更小的实例。 我们运行一个集中式的nginx,并且必须编写大量自定义的sns消息句柄来通知ngnix自动扩展策略的变化。 另一个大问题是无法调用负载平衡,因为我们使用ngnix,为什么? elb不支持websocket。