代码JAR库总是只一个

  1. 代码库-一个代码库,多个部署。这意味着您不能拥有不同版本的各种代码基。分支机构没问题,不同的回购不是。我甚至会更进一步,不推荐颠覆。并不是因为这样不好,而是因为git和mercurial做了同样的事情,而且做得更多。您可以以使用SVN的方式使用git/mercurial,但不能反过来使用git/mercurial。用于DVCS的工具(例如SourceTree)已经相当好了
  2. 相依性-显然,您必须将尽可能多的依赖项放在您的清单中(例如pu.xml)。宣言建议不要依赖预先安装的软件,例如ImageMagick或Pandoc,但我不会那么严格。如果您的部署是自动化的,并且保证了给定工具的存在,那么您不应该花费数天的时间试图将其封装在工作语言库中。如果它像在JAR文件中放置一个可导出的脚本一样容易,然后再提取它,那就好了。但是,如果它需要安装,而且您确实需要安装它(ImageMagick确实是一个很好的例子),我不认为期望它被安装是错误的。只要检查启动是否存在,如果不存在,请快速失败。
  3. 配置-这里最重要的规则是--不要在源代码回购中提交特定于环境的配置(最重要的是:密码)。否则,您的生产系统可能会受到攻击,至少有三分之一是的,MySQL可能不允许外部连接,但我敢打赌没有人能证实这一点)。

    但从那以后,我的看法与12因子应用程序不同。不,您不应该在配置中使用环境变量。因为当您有15个变量时,如果它们位于一个文件中,那么管理它们就容易得多。您可以使用一些shell脚本来设置它们,但这违背了操作系统的独立性。我认为,拥有一个键值.properties文件(Java有本机支持的文件),并且只将该文件的绝对路径作为环境变量(或JVM param)传递是一种更好的方法。何值)。这样,您就可以在一个地方拥有所有的属性,并且很容易发现在给定的场景中可能需要添加/重新配置什么。如果使用环境变量,则必须在txt文件中列出它们的列表,以使它们“可被发现”,或者让开发人员深入研究代码,以确定哪些属性可用。

    最后,但同样重要的是--当我说您不应该将属性文件提交到源代码管理时,有一个非常特殊的例外。您可以选择对环境配置进行版本化。它必须是私有回购,访问权限有限,但是(开发)操作可以保留每个环境的属性和其他特定的版本。使用属性文件(使用env变量并不是不可能的,但同样需要shell脚本)会更容易。

  4.  

    这款12因素的应用程序的作者警告说,环境会爆炸。如果您有每个环境的属性文件,这些属性文件可能会增长。但他们不必这么做。您可以完全按照管理环境变量的方式更改属性文件中的值。

  5.  
  6. 管理进程-普遍同意,但我还想说,最好是在部署或启动时执行迁移,而不是手动执行,并且在生产中手动更改“东西”最好是通过类似Capstrano的操作来完成,以确保在所有实例中都是相同的。

https://www.jianshu.com/p/1feca2804ae8

总的来说,这是一套很好的建议,也是我推荐的一种构建应用程序的方法,考虑到上面的评论

Tomcat有几个连接器可供选择。我将把APR连接器放在一边,专注于BIO和NIO。

BIO连接器(阻塞I/O)是阻塞的-它使用线程池,其中每个线程接收一个请求,处理它,响应,并返回到池。在阻塞操作(例如从数据库读取或调用外部API)期间,线程被阻塞。

NIO连接器(无阻塞I/O)有点小。。它使用javaNIO库和请求之间的多路复用器。它有两个线程池-一个包含轮询线程,它处理所有传入请求并将这些请求推送到另一个池中由工作线程处理。两个池大小都是可配置的。

https://www.imdb.com/list/ls506154501/

什么时候喜欢NIO和BIO取决于用例。如果您大多数情况下都有常规的请求响应使用,那么这并不重要,甚至bio也可能是一个更好的选择。如果您有长时间的连接,那么NIO是更好的选择,因为它可以为更多的并发用户提供服务器,而不需要为每个线程指定一个阻塞的线程。轮询线程处理数据发送回客户端,而工作线程处理新请求。换句话说,无论是轮询线程还是工作线程,都不会被单个用户阻塞和保留。

随着…的引从上一段中可以更容易地看到后一种情况。这可能是Tomcat 8中将默认连接器从BIO转换为NIO的原因之一。这是一个重要的问题,特别是因为它们没有确切地更改“默认值”。

默认值总是“HTTP/1.1”,但是在Tomcat 7中,它“使用自动切换机制来选择阻塞基于Java的连接器或基于apr/本机的连接器“,而在Tomcat 8中”使用自动切换机制来选择非阻塞基于JavaNIO的连接器或基于APR/本机的连接器“。为了让事情变得更困难,他们引入了NIO 2连接器。老实说,我不知道这两个NIO连接器中的哪一个是默认使用的。

https://greasyfork.org/en/scripts?set=483111

因此,即使您对tomcat配置有经验,也要记住这种默认设置的更改。(一般说来,我建议大家读一属性,并在您的服务器上使用它们)

蓝绿色部署是一种在不停机的情况下对产品堆栈进行增量更新的方法,并且对于正确处理滚动更新(包括回滚功能)也没有任何复杂性。

我不需要重我会扩展到他们身上。

蓝绿色部署是指存在“活动”和“备用”服务器集的部署。正在运行当前版本的活动,以及准备运行任何新部署版本的备用文件。“活动”和“备用”与“蓝色”和“绿色”略有不同,因为一组始终是“蓝色”,一组总是“绿色”,而“活动”和“备用”标签则会发生变化。

例如,在AWS上,您可以通过拥有两个主堆栈的子堆栈来编写部署脚本--活动堆栈和备用堆栈(由堆栈标签指示),每个子堆栈具有一个(或多个)应用程序层自动缩放组,以及一个执行以下操作(也适用于非AWS)的脚本:

  • 将构建推送到可访问的位置(例如S3)
  • 将空闲自动缩放组大小设置为所需的值(未使用时备用值保持在0)。
  • 让它在启动时获取被推送的构建。
  • 等它开始
  • 运行正常测试
  • 将dns切换到备用ASG前面的ELB。
  • 切换标签,使备用标签活动,反之亦然。
  • 将以前活动的ASG大小设置为0

这以做起来很容易--像这样替换。

但是(正如Fowler所指出的),数据库是最棘手的组件。如果您有两个数据库,其中的备用数据库是活动数据库的从副本(而且每次切换时都会更改),则设置会变得更加复杂。您仍然需要进行模式更改。因此,如果可能的话,使用单个数据库是更容易的方法,不管您是有“常规”数据库还是无模式数据库

上一篇:javax.imageio.IIOException: Can't create cache file!


下一篇:Java NIO FileLock