基于Drone来做CI/CD,个人感觉真的很棒,相对于业界老大哥jekins,我更喜欢drone,相比较而言,我觉得它主要有以下优势
- 插件不需要额外管理
- 基于yaml文件,易编写,配置可以进行版本管理
- 可以根据不同的条件进行构建
- 更人性化的UI界面
对于我们后端的java项目而言,我们CI要做什么呢?
基于Drone来做CI/CD,个人感觉真的很棒,相对于业界老大哥jekins,我更喜欢drone,相比较而言,我觉得它主要有以下优势
对于我们后端的java项目而言,我们CI要做什么呢?
在使用K8S rolling update的时候,我同时使用JMeter不间断call API,就有少部分请求抛出了这个错误
1 | { |
在kubernetes中部署前端项目(使用nginx作为服务器)的时候,遇到了一个报错,报错信息如下
1 | 2019/11/19 02:16:31 [emerg] 1#1: open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:14 |
提示的意思是没有找到mine.types文件,也就是说容器内/etc/nginx下不存在这个文件。但是这个文件不是nginx提供的吗?
Kubernetes Ingress是为了代理不同后端Service而设置的负载均衡服务,我们自己的每个服务可以根据自己的需求定制自己的ingress rule.
实际的使用中我们要选择一个具体的ingress controller,部署在k8s集群中,然后Ingress Controller会根据我们定义的Ingress对象,提供对应的代理能力。
比如我在们开发一个cms系统,是前后端分离的,也是分开部署的,我希望它们有这样的规则
1 | http://www.mycms.com/api ---> 后端 |
我们以前用Mysql的时候,经常是一台服务器走天下,如果只是用于学习,是没有问题的,但是在生产环境中,这样的风险是很大的,如果服务器因为网络原因或者崩溃了,就会导致数据库一段时间了不可用,这样的体验很不好。
那么应该怎么办呢?既然一台机器不行,我就多上几台机器总可以了吧,比如我上个两台,让他们互为主备,相互同步数据。想到这里我就只想说一个字,稳。
其实redis,mongodb,kafka等分布式应用基本上都是这样的思想
MongoDB也差不多是这样的思想。它通过复制集来解决这个问题,MongoDB复制集由一组Mongod进程组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
要想成为primary节点,你必须保证大多数节点都同意才行,大多数的节点就是副本中一半以上的成员。
开发web项目的时候,我们一般会有多个环境(dev,beta,rc,production),然后每次使用maven打包的时候都要指定profile
1 | mven clean package -P beta |
这样就可以将application-{profile}.properties打入jar包中。这也就意味着对于不同的环境我们要打不同的包,虽然他们只有一些配置信息不同而已。
那么有没有办法在不同的环境中使用相同的应用程序代码呢? 当然有,springboot提供了这样的机会,它允许我们通过很多种方式来决定配置文件是哪一个,当然啦本篇文章并不是介绍有哪些加载外部配置文件的方式。
在Java的Object类中有2个我们不怎么常用(框架中用的更多)的方法:wait()与notify()或notfiyAll(),这两个方法主要用于多线程间的协同处理,即控制线程之间的等待、通知、切换及唤醒。
首先了解下线程有哪几种状态,Java的Thread.State中定义了线程的6种状态,分别如下:
在Rest中,数据的呈现方式叫做资源(Resource)。拥有强大而一致的REST资源命名策略,是最好的设计决策。
一个资源可以是单个的也可以是一个集合。比如customers是一个集合,而customer是单个资源。我们可以定义customers这个集合的资源的URI是/customers
,而单个customer资源的URI是/customers/{customerId}
。
资源也可以包含子集合的资源。比如,使用/customers/{customerId}/accounts
来表示某个customer下的account集合资源。同样的,对于account集合资源下的单个account我们可以定义成这样:/customers/{customerId}/accounts/{accountId}
REST API使用统一资源标识符(URI)来寻址资源。REST API设计者应该创建URI,将REST API的资源模型传达给潜在的客户端开发人员。当资源命名良好时,API直观且易于使用。如果做得不好,那么相同的API会感觉难以使用和理解。