Spring Cloud

微服务化的基石——持续集成

懵懂的女人 提交于 2021-02-12 09:59:56
点击上方“ 程序员小灰 ”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 刘超的通俗云计算 一、持续集成对于微服务的意义:拆之前要先解决合的问题 在很多微服务化的文章中,很少会把持续集成放在第一篇,因为大多数的文章都会将如何拆的问题,例如拆的粒度,拆的时机,拆的方式。 为什么需要拆呢?因为这是人类处理问题的本质方式:将一个大的复杂问题,变成很多个小问题解决。 所以当一个系统复杂到一定程度,当维护一个系统的人数多到一定程度,解决问题的难度和沟通成本大大提高,因而需要拆成很多个工程,拆成很多个团队,分而治之。 然而当每个子团队将子问题解决了,整个系统的问题就解决了么?你可以想象你将一辆整车拆成零件,然后再组装起来的过程,你就可以想象拆虽然不容易,合则更难,需要各种标准,各种流水线,才能将零件组装称为车。 我们先来回顾一下拆的过程。 最初的应用大多数是一个单体应用 一个Java后端,后面跟一个数据库,基本上就搞定了。 随着系统复杂度的增加,首先Java程序需要做的是纵向的拆分。 首先最外面是一个负载均衡,接着是接入的nginx,做不同服务的路由。 不同的服务拆成独立的进程,独立部署,每个服务使用自己的数据库和缓存,解决数据库和缓存的单点瓶颈。 数据库使用一主多从的模式,进行读写分离,主要针对读多写少的场景。 为了承载更多的请求,设置缓存层

0503-Hystrix保护应用-feign的hystrix支持

ぐ巨炮叔叔 提交于 2021-02-12 08:09:43
一、概述 1.1、基础【示例一】   如果Hystrix在类路径上并且 feign.hystrix.enabled = true ,Feign将用断路器包装所有方法。还可以返回com.netflix.hystrix.HystrixCommand。这可让您使用响应模式(调用.toObservable()或.observe()或异步使用(调用.queue())。   要以每个客户端为基础禁用Hystrix支持,请创建一个具有“prototype”范围。   在Spring Cloud Dalston发布之前,如果Hystrix在类路径上,Feign默认情况下会将所有方法封装在断路器中。 Spring Cloud Dalston改变了这种默认行为,以支持选择加入方式。 @Configuration public class FooConfiguration { @Bean @Scope( "prototype" ) public Feign.Builder feignBuilder() { return Feign.builder(); } } 1.2、Fallbacks【示例一、示例二】   Hystrix支持回退的概念:当电路断开或出现错误时执行的默认代码路径。要为给定的@FeignClient启用回退,请将fallback属性设置为实现回退的类名称

【福利来了】B站 Java 精选视频,都帮你整理好了,拿去用!!!

人盡茶涼 提交于 2021-02-12 06:42:04
大家好,今天帮大家整理了一下b站上java相关的精华视频,供大家使用, 文末有福利 !!! 一、Java基础 尚硅谷宋红康(强力推荐) https://www.bilibili.com/video/av48144058 动力节点Java零基础教程视频 https://www.bilibili.com/video/av11361088 北京尚学堂高琪(推荐) https://www.bilibili.com/video/av30023103 求知讲堂:2019求知讲堂零基础Java入门编程视频教程高口碑无废话无尿点 https://www.bilibili.com/video/av76235341 尚硅谷Java8新特性+JUC+NIO https://www.bilibili.com/video/av71563078 二、数据结构与算法 郝斌-数据结构入门 https://www.bilibili.com/video/av6159200 尚硅谷韩顺平图解Java数据结构与算法 https://www.bilibili.com/video/av54029771 数据结构与算法基础-java版(颜群) https://www.bilibili.com/video/av33835237 清华大学-邓俊辉MOOC数据结构与算法全套 https://www.bilibili.com

聊聊中间件开发

邮差的信 提交于 2021-02-10 16:49:44
最近频繁地在跟实习生候选人打交道,每次新接触一个候选人,都要花上一定的时间去介绍我们团队,候选人问的最多的一个问题就是「中间件部门一般是干嘛的?」,恰好我之前也接触过一些想从事中间件开发的小伙伴,问过我「现在转行做中间件开发还来得及吗?」诸如此类的问题,索性就写一篇文章,聊聊我个人这些年做中间件开发的感受吧。 什么是中间件开发? 我大四实习时,在一个 20 多人的软件开发团队第一次接触了中间件,当时项目的架构师引入了微博开源的 RPC 框架 Motan,借助于这个框架,我们迅速构建起了一个基于微服务架构的内部电商系统。接着在项目中,由于业务需求,我们又引入了 ActiveMQ...在这个阶段,我已经在使用中间件了,但似乎没有接触到中间件开发,更多的是使用层面上的接触。 我毕业后的第一份工作,公司有几百号研发,当时的 leader 看我对中间件比较感兴趣,有意把我分配在了基础架构团队,我第一次真正意义上成为了一名”中间件研发“,平时主要的工作,是基于开源的 Kong 和 Dubbo,进行一些内部的改造,以提供给业务团队更好地使用。这个阶段,做的事还是比较杂的,业务团队对某些中间件有定制化的需求,都需要去了解这个中间件,熟悉源码。这段时间,也是我成长最快的一个时期,我是在这个期间学会了 Docker、Neo4j、Kong 等以前从来没接触过的技术,并且更加深入地了解 Dubbo 这类

JAVA是否适合非科班者自学入行?石油工程专业从培训到JAVA入门自学亲身经历

眉间皱痕 提交于 2021-02-10 05:19:32
如今的我已经过了三十而立的年纪,虽然在三十岁我没有立下任何事业,相反,还在茫茫苦海中挣扎。 但是我并不是没有收获。当然,曾经在我拥有大好青春年华的时候选择了迷茫,以至于当我有所明悟的时候,却已经错过了最好的时光。 那年我二十八岁,经朋友介绍,初次接触了JAVA。当时由于年纪的原因,我报了培训班。可能是当时不够了解,就被一个特垃圾的培训机构忽悠了去,以致于到培训结束的时候,老师只教了Spring,Sturts,Herinate,以及JDBC等过时的老知识。而自己也是懵懵懂懂,一问三不知。 虽然初生牛犊不怕虎的去找工作,但不出意外,全部失利。唉,只怪自己当初选择的培训班不慎重。 于是,我静下心来,认认真真的捋了捋自己接下来的路该如何走。经过一番自我反省,我意识到,培训班没学好,那就自己去自学。 当然对于如何自学,自己从哪里找比较符合的自学资料,成了我的难题。于是我常常面试结束后,就赶紧去网上找找关于JAVA初学者如何自学的网站和资料,以及如何制定自己的自学计划。 功夫不负有心人,终于有一天,我偶尔发现了了这个网站,我迫不及待的进行了注册,果然没让我失望!!! 那么我是如何在这个网站进行自学的呢?而其他的JAVA初学者又如何自学才能有效的提高技术水平呢? 首先,自学不是一蹴而就的,是需要长时间的积累才能有所成效的。所谓冰冻三尺,非一日之寒,不积跬步,无以至千里

eureka server 单节点与多节点部署演示

邮差的信 提交于 2021-02-09 20:01:17
环境搭建 目录结构(ad-eureka为子模块)   --ad-spring-cloud    --ad-eureka      --pom.xml    --pom.xml 主pom.xml    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modules> <module

带你认识互联网架构的演变过程

六眼飞鱼酱① 提交于 2021-02-09 13:53:04
单体架构(all in one) 所有模块都在一起,技术也不分层。 在单机上部署所有的应用程序和软件。 所有的代码都写在JSP里面,所有代码都写在一起,这种方式称为all in one。 特点: 1.不具备代码的可维护性。 2.容错性差。(容错性是指软件检测应用程序所运行的软件和硬件中发生的错误并从错误中恢复的能力,可以从系统的可靠性,可用性,可测性等几个方面衡量) 因为所有代码都写在JSP页面里,当因为用户或某些原因发生异常时:用户可以直接看到异常错误信息;异常会导致服务器宕机。 单体地狱: 只需一个应用,将所有功能部署在一起,以减少部署节点和成本。 解决方案 1.分层开发:解决单体架构容错性差的问题,同时提高了代码的维护性。 2.MVC架构(Web应用程序的设计模式) 3.服务器的部署分离。 特点: 1.MVC分层开发:解决容错性问题。 2.数据库和项目部署分离。 <font color=red>问题</font>: 1.高并发:随着用户访问量的持续增加,单台服务器无法满足用户访问需求。 解决方案: 1.集群 集群操作可能遇到的问题 高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。 如何保证高可用:避免单点。 高并发 高并发

公众号全部精华文章导航手册

泄露秘密 提交于 2021-02-08 21:55:29
前言 该文章收集了本公众号的全部精华文章,方便读者阅读。 面试知识点复习手册 Java后端开发知识点快速复习手册全导航 Java基础知识点面试手册(上) Java基础知识点面试手册(下) Java容器(List、Set、Map)知识点快速复习手册(上) Java容器(List、Set、Map)知识点快速复习手册(中) Java容器(List、Set、Map)知识点快速复习手册(下) Redis基础知识点快速复习手册(上) Redis基础知识点快速复习手册(下) Java并发知识点快速复习手册(上) Java并发知识点快速复习手册(下) Java虚拟机知识点快速复习手册(上) Java虚拟机知识点快速复习手册(下) HTTP应知应会知识点复习手册(上) HTTP应知应会知识点复习手册(下) 计算机网络基础知识点快速复习手册 面试常问的小算法总结 快速梳理23种常用的设计模式(上篇) 快速梳理常用的设计模式(中篇) 快速梳理23种常用的设计模式(下篇) 海量数据处理问题知识点复习手册 排序算法最强总结及其代码实现(Python/Java) 查找算法总结及其算法实现Python/Java 后端开发趣闻 阿里巴巴Java开发手册阅读笔记 通俗易懂的生产环境Web应用架构介绍 Zookeeper和Kafka环境搭建总结 Spring Boot开发实战 Springboot实战:发送邮件

SpringCloud开发学习总结(七)—— 声明式服务调用Feign(二)

試著忘記壹切 提交于 2021-02-08 05:26:49
参数绑定    在上一章的示例中,我们使用Spring Cloud Feign实现的是一个不带参数的REST服务绑定。然而现实系统中的各种业务接口要比它复杂得多,我们有时会在HTTP的各个位置传入各种不同类型的参数,并且在返回请求响应的时候也可能是一个复杂的对象结构。在这章中,我们将详细介绍Feign中对几种不同形式参数的绑定方法。   在介绍Spring Cloud Feign的参数绑定之前,先扩展服务提供方hello-service。增加包含带有Request参数的请求、带有Header信息的请求、带有RequestBody ① 的请求以及请求响应体中是一个对象的请求。 1 @RestController 2 public class HelloController { 3 @RequestMapping("/hello" ) 4 public String hello() { 5 return "hello provide" ; 6 } 7 8 @RequestMapping("/hello1" ) 9 public String hello(@RequestParam String name) { 10 return "Hello "+ name; 11 } 12 13 @RequestMapping("/hello2" ) 14 public User hello(

你所不知道的Java十种经典排序算法

痞子三分冷 提交于 2021-02-07 12:15:02
算法分类 比较排序:在排序的最终结果里,元素之间的次序依赖于他们之间的比较,每个数必须和其他数进行比较,才能确定自己的位置。 优势:适用于一切需要排序的情况。不在乎数据的分布,适用于各种规模的数据 冒泡排序、快速排序、插入排序、希尔排序 、堆排序、选择排序、归并排序。 在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为logN次,所以平均时间复杂度为O(nlogn)。 非比较排序:只要确定每个元素之前的已有的元素个数即可,所有一次遍历即可解决。时间复杂度为O(n)。 计数排序、基数排序、桶排序。 非比较排序的时间复杂度低,但是需要占用空间来确定唯一的位置。 递归factorial 方法内部调用方法本身 ⚠️递归的层级太深容易造成栈内存溢出stackOverFlowError 冒泡排序 一次比较相邻的两个元素,如果第一个比第二个大就交换它们两个。 从第一对到结尾的最后一对,重复比较。 重复前面两个步骤(每次都能找到一轮中的最大值)。 算法分析: 最佳情况:T(n) = O(n) 最差情况:T(n) = O(n²) 平均情况:T(n) = O(n²) public static int [ ] bubbleSort ( int [ ] array ) { if ( array .