Spring Cloud Netflix之Eureka下篇原理

摘要:本文主要介绍Eureka的工作原理,Eureka 组件分为两部分:Eureka serverEureka client。而客户端又分为 Application Service 客户端Application Client 客户端两种。Eureka 的工作机制每个 region 都有自己的 Eureka 服务器集群,每个 zone 至少要有一个 Eureka 服务器以应对 zone 瘫痪。

查看更多

Spring Cloud Netflix之Eureka上篇

前言:Spring Cloud NetFlix这个项目对NetFlix中一些久经考验靠谱的服务发现,熔断,网关,智能路由,以及负载均衡等做了封装,并通过注解的或简单配置的方式提供给Spring Cloud用户用。本文主要介绍 Spring Cloud中的Eureka组件。由于Spring Cloud做技术选型时中立的,因此Spring Cloud也提供了Spring Cloud Zookeeper,Spring Cloud Consul用于服务治理或服务发现供大家选择使用,另外我还发现Spring Cloud etcd这个项目,也可以用于服务注册和发现

查看更多

Spring Cloud Sleuth-全链路监控调研

前言:做过软件开发的都知道,对系统进行全链路的监控是非常有必要的。在单体应用中,传统的方式是软件开发者,通过自定义日志的level,日志文件的方式记录单体应用的运行日志。从而排查线上系统出现运行过慢,出现故障,异常等问题,但是在微服务架构或分布式系统中,一个系统被拆分成了A、B、C、D、E等多个服务,而每个服务可能又有多个实例组成集群,采用上诉定位问题的方式就行不通了,你充其量就知道某个服务是应用的瓶颈,但中间发生了什么你完全不知道。而且问题的查询,因为有海量各种各样的日志等文件,导致追溯定位问题等极其不方便。因此需要全链路监控系统的收集,上报,对海量日志实时计算生成,监控告警,视图报表,帮助开发人员快速定位问题

服务追踪分析

一个由微服务构成的应用系统由N个服务实例组成,通过REST请求或者RPC协议等来通讯完成一个业务流程的调用。对于入口的一个调用可能需要有多个后台服务协同完成,链路上任何一个调用超时出错都可能造成前端请求的失败。服务的调用链也会越来越长,并形成一个树形的调用链。如下图所示:
调用链

查看更多

什么是Spring Cloud Config?

前言:在单体应用中,我们一般的做法是把Property和Code放在一起,没有什么问题。但是在分布式系统中,由于存在多个服务实例,需要分别管理到每个具体的服务工程中的配置,上线需要准备check list 并逐个检查每个上线的服务是否正确。在系统上线之后修改某个配置,需要重启服务。这样开发就相当麻烦。因此我们急需需要把分布式系统中的配置信息抽取出来统一管理,服务获取系统信息时有一个覆盖顺序:property–> Evn—->配置中心。这样修改环境变量或者修改配置中心的配置就能取到最新的配置信息。在唯品会 Venus Framework中我们专门设计了这个功能。Spring cloud出现之后,避免了大家重复造轮子。

什么是 Spring Cloud Config ?

其官方文档中对自己的定义是如下,官网连接:Spring Cloud Config

Spring Cloud Config provides server and client-side support for externalized configuration in a distributed system.
With the Config Server you have a central place to manage external properties for applications across all environments.

简单来说,Spring Cloud Config就是我们通常意义上的配置中心 - 把应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。

查看更多

Spring Cloud微服务框架主要子项目和RPC框架的对比

 摘要:Spring Cloud是一个相对比较新的微服务框架,今年(2016)推出1.0的release版本,目前Github上更新速度很快. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。spring cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用.它们将在任何分布式环境中工作,包括开发人员自己的笔记本电脑,裸物理机的数据中心,和像Cloud Foundry云管理平台。在未来引领这微服务架构的发展,提供业界标准的一套微服务架构解决方案。

查看更多

Jdk的万能配置

 java是通过java虚拟机来解释运行的,也就是通过java命令; javac编译生成的.class文件就是虚拟机要执行的代码, 称之为字节码(bytecode),虚拟机通过classloader来装载这些字节码,也就是通常意义上的类.这里就有一个问题,classloader从哪里知道java本身的类库及用户自己的类在什么地方呢?或者有着缺省值(当前路径).或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机.
通过这段文字,你就知道,为什么javac编译通过了,但是java命令却出错(类定义没找到)的原因了。
就是环境变量classpath(类路径)没有设置正确,使得JAVA虚拟机的classloader无法找到类来执行目标程序

查看更多

关于SpringCloud中国社区以及国内使用情况

Spring Cloud中国社区起源

其实当Spring Cloud项目刚在github上出现的时候,我就一直在关注其项目发展,到了2015年8月,由于个人兴趣研究Spring Cloud项目,由于国内相关文档较少,当时就想建立一个中国社区,于是就先把域名注册了,选中域名为springcloud.cn。
springcloud.cn

为什么要发起Spring Cloud中国社区

Spring Cloud发展到2016年,国内关注的人越来越多,但是相应学习交流的平台和材料比较分散,不利于学习交流,因此Spring Cloud中国社区应运而生。
社区标识
 Spring Cloud中国社区是国内首个Spring Cloud构建微服务架构的交流社区。我们致力于为Spring Boot或Spring Cloud技术人员提供分享和交流的平台,推动Spring Cloud在中国的普及和应用。 欢迎CTO、架构师、开发者等,在这里学习与交流使用Spring Cloud的实战经验。 目前QQ群人数:7000+,微信群:2000+.
扫描下面二维码或者微信搜索SpringCloud,关注社区公众号
社区微信公众号
Spring Cloud中国社区QQ群①:415028731
Spring cloud中国社区QQ群②:530321604
Spring Cloud中国社区官网:http://springcloud.cn
Spring Cloud中国社区论坛:http://springcloud.cn
Spring Cloud中国社区文档:http://docs.springcloud.cn

spring cloud目前国内使用情况

  1. 中国联通子公司
    http://flp.baidu.com/feedland/video/?entry=box_searchbox_feed&id=144115189637730162&from=timeline&isappinstalled=0

    查看更多

并发编程总结之线程间的通信

摘要:使用wait/notify方法实现线程间的通信。wait和notify必须配合synchronized关键字使用,wait方法释放锁notify方法不释放锁

线程间通信概念

线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。当线程存在通信指挥,系统间的交互会更加强大,在提高CPU利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。

wait/notify实现线程通信

使用wait/notify方法实现线程间的通信。注意这两个方法都是Object的类方法,换句话说Java为所有的对象提供了这个两个方法。
1.wait和notify必须配合synchronized关键字使用
2.wait方法释放锁notify方法不释放锁

查看更多

并发编程总结之volatile

摘要:本节主要介绍了 volatile关键字的作用是使变量在多个线程间可见,但是不具有原子性,以及volatile的运行内存介绍。

  1. 在java中,每个线程都会有一块工作内存区,其中存放着所有线程共享主内存中变量值的拷贝。当线程执行时,它在自己的工作区内存中操作这些变量。为了存取一个共享的变量,一个线程通常会先获取锁定清除它的内存工作区,把这些共享变量从所有线程的共享内存中正确的装入到它自己所在的工作内存中,当线程解锁时,保证该工作内存中变量的值写回到共享内存中。

    查看更多

并发编程总结之synchronized细节问题

摘要:本节主要介绍了并发编程下怎么避免数据脏读和什么是synchronized的可重入锁,synchronized的可重入锁的几种使用场景下,是线程安全的。以及一些细节的synchronized使用问题和synchronized常见代码块示例Code可以直接Copy运行。


脏读

什么是脏读

对于对象的同步和异步方法,我们在设计程序,一定要考虑问题的整体性,不然会出现数据不一致的错误,最经典的错误就是脏读(DirtyRead)。

示例Code

业务整体需要使用完整的synchronized,保持业务的原子性。

查看更多