首页 文章 精选 留言 我的

精选列表

搜索[多分片],共10000篇文章
优秀的个人博客,低调大师

Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用区,已达到高可用或者同城灾备的部署。 二、 效果图 三、 实现原理 为了实现上述的效果,kubernetes提供了pod的亲和性和反亲和性来保证pod在节点级别,可用区级别的高可用部署;具体的值为topologyKey:failure-domain.beta.kubernetes.io/zone。 四、 实现步骤 在ACK上创建完集群后,不论从哪个可用区添加节点,都会对该节点打上对应的可用区标签,比如,一个节点是属于北京可用区a的,那么在加入到kubernetes集群后,该节点上会有一个这样的标签:

优秀的个人博客,低调大师

蚂蚁金服红蓝军技术攻防演练究竟有多“狠”

如果一个技术团队不干别的,专门“搞破坏”,这是一种怎样的存在?这真的不是“天方夜谭”,在支付宝确实有这么一支队伍——技术蓝军。蓝军的任务就是不断地攻击和进攻,而防守方则是技术红军。在支付宝,蓝军从属于蚂蚁金服技术风险部(SRE),而红军则包括SRE及各业务部门的技术团队。 说到SRE,就需要科普一下了。SRE全拼为Site Reliability Engineer,是软件工程师和系统管理员的结合,是一种要求极高的技术工种。据说,目前全球只有少数几家顶级互联网公司拥有真正意义上的SRE团队,蚂蚁金服是其中之一。 由蓝军主导的技术攻防演练就是那个传说中的“疯起来连自己都打”的项目,今天,就来起底一下这个神秘的项目。 从“青铜”到强者 红蓝军技术攻防演练与蚂蚁金服技术风险部的发展息息相关,而蚂蚁技术风险的演进轨迹和游戏中的不断打怪升级非常相像。

优秀的个人博客,低调大师

Spring boot 的profile功能如何实现多环境配置自动切换

通常服务端应用开发需要经过以下几个流程: 开发 -> 测试 -> RC验证 -> 上线 这就涉及到四个不同的环境,开发环境、测试环境、RC环境以及生产环境,为了避免不同环境之间相互干扰,通常需要独立部署数据库、缓存服务器等,那么应用配置也要做相应的调整。 为了解决不同环境配置切换问题,很多人的做法是:把配置文件根据不同的环境,放到不同的目录或文件中,打包时通过gradle或maven,通过命令行参数指定要打哪个环境的包。这样就可以针对不同的环境生成不同的包。但这样的做法有以下几个问题: gradle或maven打包脚本文件需要重复编写“选择文件”打包的逻辑,增加很多重复劳动的成功; 在jenkins等集成环境中,需要针对每个应用,不同的环境做相应的设置; 需要管理不同环境的包,带来的成本;部署时,需要注意包与运行环境是否一致; 如果运行在docker中时,因为包不同所以要针对不同的环境,构建相应的镜像。 这时也许有人会说,把配置都从包里剥离出来,放到配置中心就可以了,但是不同环境对应的配置中心地址也是不一样的。 Spring中的Profile 是什么? Spring中的Profile功能其实早在Spring 3.1的版本就已经出来,它可以理解为我们在Spring容器中所定义的Bean的逻辑组名称,只有当这些Profile被激活的时候,才会将Profile中所对应的Bean注册到Spring容器中。 举个更具体的例子,我们以前所定义的Bean,当Spring容器一启动的时候,就会一股脑的全部加载这些信息完成对Bean的创建;而使用了Profile之后,它会将Bean的定义进行更细粒度的划分,将这些定义的Bean划分为几个不同的组,当Spring容器加载配置信息的时候,首先查找激活的Profile,然后只会去加载被激活的组中所定义的Bean信息,而不被激活的Profile中所定义的Bean定义信息是不会加载用于创建Bean的。 为了使用不同的环境,我们首先对不同的环境,定义相应的profile名称。 比如,开发环境的profile为:dev;测试环境的profile为:test;RC环境的profile为:rc;生产环境的profile为:prod。 下面举个dubbo不同环境下,使用不同配置的方法: 上面例子中,当激活相应的profile时,相应的配置文件才会导入。 比如:profile为dev时,导入dubbo-dev.properties。 注意:所有spring xml schema的版本必须是4.0以上,比如:http://www.springframework.org/schema/util/spring-util-4.3.xsd。spring 默认profile为default, 在没有指定profile的,会被默认为default。 如果我们使用配置中心的话,上面的配置还可以更简单。等配置中心投产后我们再讨论。 Spring boot中使用profile切换配置 Spring boot中默认加载的配置文件是:application.properties或application.yml。当激活profile后(后面我们讨论如何激活profile),可以通过profile自动选择加载的application-{profile}.properties或application-{profile}.yml格式的配置文件。 比如:profile为dev时,会加载application.properties或application.yml外,还会加载application-dev.properties或application-dev.yml配置。 另外如果引入Spring cloud 时,也会加载启动配置bootstrap.properties或bootstrap.yml以及bootstrap-{profile}.properties 或 bootstrap-{profile}.yml。 所以把各个环境公共的配置写在application.properties或application.yml中。把不同环境的配置写在application-{profile}.properties或application-{profile}.yml中。 @Profile注解的使用 使用java进行配置时,可以通过@Profile注解,实现不同环境使用配置策略。比如swagger现在使用很普遍了,但是它存在一定的安全问题,如果生产环境中也暴露swagger的话,风险还是比较大的,建议只在开发环境和测试环境启用,配置例子如下: 将上面的代码保存到logback-spring.xml文件中,而不是logback.xml中。 logback中profile的使用 在开发环境或测试环境中,为了方便排查问题,我们会使用DEBUG甚至TRACE级别的日志,而在生产环境中,避免日志增长过快,尽量只是输出ERROR级别的日志。这就需要日志配置也要能根据不同的环境,使用不同的配置策略。 spring boot中的logback就可以满足这样的需求,例子如下: 将上面的代码保存到logback-spring.xml文件中,而不是logback.xml中。 Spring boot 激活 profile的几种方式 在配置文件中直接指定 spring.profiles.active=test 这种方式非常不灵活,在实际开发部不太会使用到 使用占位符 在打包时替换,以mavne为例: 首先在配置文件中增加: spring.profiles.active=@package.target@ 在pom.xml中增加不同环境打包的配置: 执行打包命令: mvn package -Ptest 缺点:每次打包都要指定profile JVM参数方式 java命令行指定: java -jar app.jar --spring.profiles.active=dev tomcat 中 catalina.bat(.sh中不用“set”) 添加JAVA_OPS。通过设置active选择不同配置文件: set JAVA_OPTS="-Dspring.profiles.active=test" eclipse 中启动tomcat。项目右键 run as –> run configuration–>Arguments–> VM arguments中添加。 -Dspring.profiles.active="dev" 在微服务的时代,会不会觉得有点麻烦呢? web.xml方式 <init-param> <param-name>spring.profiles.active</param-name> <param-value>prod</param-value> </init-param> 标注方式(junit单元测试非常实用) @ActiveProfiles({"dev"}) ENV方式(建议使用此方式) 设置系统环境变量:SPRING_PROFILES_ACTIVE(注意:是大写) 比如mac开发环境中设置环境变量的方法: vi ~/.bash_profile 在~/.bash_profile中增加如下内容: export SPRING_PROFILES_ACTIVE=dev 注意:mac eclipse中是获取不到环境变量的解决办法,参考这文章进行处理,http://blog.csdn.net/zhzdeng/article/details/64921967 总结 上面关于profile的东西,基本能满足工作的需要了。使用profile后,可以减化因不同环境配置差异,而带来的配置管理以及打包工作。 尽量使用环境变量来激活profile,如果是可执行的包,也可以使用java命令行指定,其它方式不建议使用。 使用profile后,使得应用能更容易接入配置中心,以及使用docker容器技术,所以非常有意义。 ——————————————————分割线—————————————————— 我是黑少,直男一枚,微服务硬核玩家,喜欢分享、爱交友人、崇尚“实践出真知”的理念,以折腾鼓捣代码为乐 我的微信:weiweiweiblack (备注:开源中国 ) 微信公号:黑少微服务,专注微服务技术分享,非技术不八卦!

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册