![个人头像照片](https://ucc.alicdn.com/avatar/img_83ca6c0a52734ec8a4a895c2ce12884f.jpg)
阿里云容器服务·六翁
能力说明:
精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。
能力说明:
能够开发出高质量的代码。能够熟练使用Golang的高级特性,各种应用框架和测试框架。
能力说明:
熟练掌握Docker各类高级特性,包括容器数据卷、DockerFile构建等;熟练使用Docker封装MySQL、Redis、Tomcat、Apache等镜像,并可在公有云或私有云部署并保持稳定运行。
能力说明:
熟悉微服务常用开放框架,理解Spring、Spring Boot,以及Spring Cloud的概念和不同,对Spring Cloud Alibaba有较为全面的认知。对Istio具备基础运维能力,掌握基本组件的知识。
阿里云技能认证
详细说明
以Kubernetes为基础设施的云原生技术,彻底改变了我们的开发和思维模式。事件作为云原生领域的一等公民,已经无处不在,是云原生架构体系松耦合、灵活性的基础。 作为Gartner定义的10大战略技术趋势之一,事件驱动架构(EDA)逐渐成为主流技术架构。根据Gartner的预估,到2022年,在新型数字化商业的解决方案中,将有6成使用EDA,在商业组织参与的技术栈中,EDA有一半的占比。 本文
作为CNCF[成员](https://landscape.cncf.io/card-mode?category=continuous-integration-delivery&grouping=category&selected=weave-flagger),[Weave Flagger](flagger.app)提供了持续集成和持续交付的各项能力。Flagger将渐进式发布总结为3类: - **灰度发布/金丝雀发布(Canary)**:用于渐进式切流到灰度版本(progressive traffic shifting) - **A/B测试(A/B Testing)**:用于根据请求信息将
应用级扩缩容是相对于运维级而言的。像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容。而像请求数量、请求延迟、P99分布等指标就属于应用相关的,或者叫业务感知的监控指标。 本篇将介绍3种应用级监控指标在HPA中的配置,以实现应用级自动扩缩容。
服务网格ASM的Mixerless Telemetry技术,为业务容器提供了无侵入式的遥测数据。遥测数据一方面作为监控指标被ARMPS/prometheus采集,用于服务网格可观测性;另一方面被HPA和flaggers使用,成为应用级扩缩容和渐进式灰度发布的基石。 本系列聚焦于遥测数据在应用级扩缩容和渐进式灰度发布上的实践,将分三篇介绍遥测数据(监控指标)、应用级扩缩容,和渐进式灰度发布。
我们都知道,服务网格(ServiceMesh)可以为运行其上的微服务提供无侵入式的流量治理能力。通过配置VirtualService和DestinationRule,即可实现流量管理、超时重试、流量复制、限流、熔断等功能,而无需修改微服务代码。 本文所述的实践是根据请求Header实现全链路A/B测试。
本文将介绍使用[阿里云服务网格(ASM)](http://servicemesh.console.aliyun.com/)和[阿里云链路追踪(Tracing)](https://tracing.console.aliyun.com/),以业务无侵入的方式,实现POD粒度的自定义链路追踪标签。示例代码为[asm-best-practises](https://github.com/feuyeux/asm-best-practises/)
本文将介绍[ASM](http://servicemesh.console.aliyun.com/)入口网关(ingressgateway)支持协议转码的能力,使用户及其客户端可以使用HTTP/JSON访问服务网格内的gRPC服务。
在服务网格的流量管理和可观测性实现上,Headers发挥着非常关键的作用。相比而言,HTTP协议的Headers实现较为容易,因为HTTP是同步阻塞式的请求响应模式,可以很容易在GET/POST/UPDATE/DELETE方法中定义和使用读写Header的API。GPRC协议的Headers则要复杂一些,各种编程语言在4种不同通信模型中,读写Header的形式的差异化很大,同时还要考虑流式和异步的
在服务网格的流量管理和可观测性实现上,Headers发挥着非常关键的作用。相比而言,HTTP协议的Headers实现较为容易,因为HTTP是同步阻塞式的请求响应模式,可以很容易在GET/POST/UPDATE/DELETE方法中定义和使用读写Header的API。GRPC协议的Headers则要复杂一些,各种编程语言在4种不同通信模型中,读写Header的形式的差异化很大,同时还要考虑流式和异步的编程实现。 本篇首先介绍4种编程语言的Headers编程实践,然后讲述在服务网格实践中,GRPC协议Headers的两个重要实践:流量管理和可观测性。
上一篇容器实践的结果是,4个client容器可以访问到服务`grpc-server-svc.grpc-best.svc.cluster.local`,且该服务按负载均衡路由到4个版本的server容器。本篇将以此为基础,进行2个流量管理的实践。
本篇使用上一篇分发的镜像,在阿里云容器服务(ACK)上部署。 4个版本的client通过调用变量`GRPC_SERVER`定义的服务`grpc-server-svc.grpc-best.svc.cluster.local`,均匀地路由到4个版本的server上。与此同时,我们通过配置`istio-ingressgateway`的`Gateway`可以将外部请求按负载均衡策略路由到4个版本的grpc server上。
4种编程语言实现grpc的4种通信模型
本系列示例的设计思考
服务网格(ServiceMesh)最有吸引力的地方是什么呢?可以通过简单的配置即时实现流量管理(包括路由、灰度、切流等功能)。然而,由于缺乏足够的文档和实践分享,导致很多同学很快就从入门到放弃了。为此,我花了3段时间准备这个系列,分别对多种编程语言的GRPC服务开发、容器化、网格化进行了实践和梳理,旨在普及基于GRPC协议ServiceMesh实践的基础知识,以指南的形式让走近服务网格的同学能一葫芦画瓢先跑起来,然后再根据自身业务进行升华,从而降低学习和使用的门槛。
### 1 部署自建prometheus #### 部署prometheus 执行如下命令创建prometheus实例 ```sh # ISTIO_SRC istio源代码路径 kubectl apply -f ${ISTIO_SRC}/samples/addons/prometheus.yaml ``` 预期结果如下 ```sh serviceaccount/pro
服务网格的可观测性能力是通过Sidecar实现的,对于业务服务源代码来说是近零侵入的。可观测性包括数据采集、数据存储、数据展示和聚合分析。主要有三个维度:Metrics、Logging、Tracing,分别用于可聚合数据、离散事件、请求链路的可观测性。相应地,阿里云生态下,ASM打通了ARMS(https://www.aliyun.com/product/arms)、Log Service(https://www.aliyun.com/product/sls)、TracingAnalysis(https://www.aliyun.com/product/xtrace),供用户使用服务网格的可观
在完成了POD和VM之间互访验证后,本篇将进入VM中,重点关注两个常用的流量管理能力: - 应用通过标签进行分组 - 每个分组的多个副本可以动态落组和迁出
本系列的第一篇展示了WorkloadEntry带来的VM与POD同等负载能力。第二、三篇展示了ASM VM PROXY带来的VM流量转移能力。本篇将结合这两种能力,完整地展示ASM支持非容器应用网格化的流量管理能力。由于篇幅所限,安全相关能力不做展示,但网格化后VM中的应用间、及与POD互访都具备了请求认证和来源认证的能力,再结合RBAC可以完整实现认证和授权。
为了实现高可用,非容器应用通常有一套服务注册和发现的机制。相对而言,kubernetes容器服务为POD提供了统一的基于dns的注册和发现机制。对于http协议的非容器应用的迁移,因为都是基于dns机制,切换成本交底。而对于使用非http协议的非容器应用,服务注册和发现这个技术点为迁移带来了额外的困难。 如何从非容器的注册和发现大脑最终迁移到kubernetes的注册和发现大脑,目前尚没有广泛认可的方案。目前常见的讨论是双脑方案,就是让非容器应用在启动时同时向两套大脑注册,并从两套中发现依赖服务,然后逐步实现向kubernetes大脑过度。这套方案的优点是可以通过随时摆动来保证可用性。
非容器应用的网格化需要前一篇讲述的WorkloadEntry配置,同时需要本篇讲述的sidecar配置。前者让kubernetes容器内的POD可以找到VM中的应用,后者让VM中的应用可以找到POD。
Istio从1.6版本开始在流量管理中引入了新的资源类型Workload Entry,用以将虚拟机(VM)或者裸金属(bare metal)进行抽象,使其在网格化后作为与Kubernetes中的POD同等重要的负载,具备流量管理、安全管理、可视化等能力。通过WorkloadEntry可以简化虚拟机/裸金属的网格化配置过程。
ASM-VM-PROXY是连接ASM和VM的工具,运行在VM节点中,负责与ASM通信获取xDS信息、劫持非容器应用流量并执行网格化操作(比如上报链路追踪数据、请求安全认证等)。为了支持跨操作系统,以docker image的方式分发。 为了演示跨操作系统的能力,本文使用三种最常见的Linux分发版本创建ECS实例。
非容器应用的网格化是指将虚拟机或者裸金属上的应用加入服务网格的过程。这些应用网格化后可以和POD中的服务一样,具备服务网格的各种能力(比如流量转移、链路跟踪、安全请求等)。 本系列将全面介绍如何基于阿里云服务网格(Alibabacloud ServiceMesh, ASM),将ECS上的应用网格化,使其与阿里云Kubernetes容器服务(Alibabacloud Container Service for Kubernetes, ACK)上的POD能够进行相互通信,且自身具备网格化的各项能力。
继MicroServices之后,ServiceMesh是又一个推动软件工业的革命性技术。其服务治理的方法论,不仅改变了技术实现的方式和社会分工。 运行于数据平面的用户服务与治理服务的各种规则彻底解耦。运行于控制平面的规则定义组件,将流量控制的具体规则推送给运行于数据平面的proxy,proxy通过对用户服务的ingress和egress的实际控制,最终实现服务治理。 原本需要服务开发
服务网格包含两种认证方式: • 传输认证:基于双向TLS技术,常用于服务间通信认证。 • 来源认证:基于JWT技术,常用于客户端和服务之间的请求认证。 在服务网格中配置JWT请求授权,可以实现来源认证(又称为最终用户认证)。在接收用户请求时,该配置用于认证请求头信息中的ACCESS TOKEN是否可信,并授权给来源合法的请求。
继MicroServices之后,ServiceMesh是又一个推动软件工业的革命性技术。其服务治理的方法论,不仅改变了技术实现的方式和社会分工。 运行于数据平面的用户服务与治理服务的各种规则彻底解耦。运行于控制平面的规则定义组件,将流量控制的具体规则推送给运行于数据平面的proxy,proxy通过对用户服务的ingress和egress的实际控制,最终实现服务治理。 grpc协议相比http而言,既具备http跨操作系统和编程语言的好处,又提供了基于流的通信优势。而且,grpc逐渐成为工业界的标准,一旦我们的grpc服务可以mesh化,那么更多的非标准协议就可以通过转为grpc协议的方式
智能语音交互(Intelligent Speech Interaction)是AI的入口,智能语音交互之于VUI,正如鼠标键盘之于GUI。但什么是智能语音交互呢?这个名词并非每位同学都能望文生义,我试着给出个最简练的解释:让机器能听懂我们的话,并能给出相应的反馈。
基于SpringBoot的算法微服务,通常在启动阶段加载算法模型。但因为业务上,模型大小和数量是动态的,因此这一过程短则1分钟,长则5+分钟。在启动时加载导致的启动时间过长,会影响服务自身的监控告警、健康检测。
|zookeeper|spark| |:--|:--| |![screenshot.png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/0cbb55e7c068de18bb51d25947c2dfbd.png)|![screenshot.png](http://ata2-img.cn-hangzhou.img-pub.aliyun-i
Docker是一个开源平台,使开发者和系统管理员可以构建、发布和运行分布式应用。Docker包括Docker引擎、可移植的轻量级运行环境和打包工具,Docker Hub提供了分享应用和自动化工作流的云服务,Docker可以使应用由多个组件快速装配起来,消除了开发、测试和生产环境的差异。
>https://docs.docker.com/reference/api/docker_remote_api >>tends to be REST >https://docs.docker.com/articles/basics/#bind-docker ###拓扑 ####Parallel Desktop网络配置 共享网络-默认适配器 ![2014_08_23_PD_
> 本文使用的环境是:[搭建基于Docker的NPM私服Sinopia](http://www.atatech.org/articles/21345) ###获得nsenter ####如果已经存在镜像压缩包 先解压再运行 ``` erichan@ubuntu14_04_1-pd:~/docker-tars$ d load -i nsenter.tar erichan@ubuntu1
####0 node应用·盗梦空间 ![2014_08_17_02_25_00](http://img1.tbcdn.cn/L1/461/1/462fcbef2aa688216c90fb6edbe364cc69629528) ####1 docker的NodeJs工作目录 ``` /home/erichan/docker-room/ubuntu-node ``` ####2
>本文环境: jedis 2.1.0 redis 2.8.13 ###Redis无响应 我们的各个子系统均使用Jedis作为Redis的Java Client读写数据。 Jedis底层使用Apache的Common Pool,每个Jedis对象在底层都视为一个Object。 当释放连接失败后,我们的做法只是输出错误日志,这会导致该连接无法回收再利用,最终服务器的连接池会被拖
![2014_08_24_14_59_03_copy](http://img4.tbcdn.cn/L1/461/1/83a670c27b5bb8a4d59c7199083e3bad2f5b3f42) ###[Left side]docker save ``` nano copyall.sh sudo /usr/local/bin/docker save -o sinopia.t
搭建ZooKeeper服务器 ---- ### 1 Docker-Ubuntu-Zookeeper >工作目录:/home/erichan/docker-room/ubuntu-zookeeper #### 1.1 制作镜像 ``` erichan@ubuntu14_04_1-pd:~/docker-room/ubuntu-zookeeper$ nano Dockerfile
![](http://img3.douban.com/lpic/s28323514.jpg) ``` wget https://archive.ics.uci.edu/ml/machine-learning-databases/00210/donation.zip ``` 数据清洗 ``` cd /Users/erichan/garden/spark-1.6.0-bin-h
![](http://img3.douban.com/lpic/s28323514.jpg) [潜在语义分析](http://www.atatech.org/articles/48374) ``` wget http://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles-multistream.xml.bz2
###安装Docker Docker支持很多种宿主操作系统(详见[installation](https://docs.docker.com/installation/ )),这里以CentOS为例,简述安装: Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EPEL包。 **6.5 yum安装** ```
####docker命令别名 **~/.bashrc** ``` # .bashrc alias d="sudo docker” ``` ####docker的nginx工作目录 /home/erichan/d/nginx ####docker的Dockerfile # Version: 0.0.1 FROM feuyeux/ssd MAINTAINE
![screenshot](http://img4.tbcdn.cn/L1/461/1/0c83aa720cf3b20490751b3d58545d8540ada889) >官方地址:[https://github.com/crosbymichael/dockerui](https://github.com/crosbymichael/dockerui) ###远程构建镜像 ``` [
###0 tomcat应用·盗梦空间 ![screenshot](http://img3.tbcdn.cn/L1/461/1/cade39eb2f1c95b3ffd0134700fcf6dd2b62374e) ### 1 Docker-Ubuntu-Java7 >工作目录:/home/erichan/docker-room/ubuntu-java7 #### 1.1 制作镜像 `
####制作镜像 Dockerfile ``` # Version: 0.0.1 FROM feuyeux/ubuntu-node MAINTAINER Eric Han "feuyeux@gmail.com" RUN apt-get -yq install make build-essential python python-dev RUN npm install js-yam
![2014_08_27_redis_master_slave](http://img2.tbcdn.cn/L1/461/1/519d6d0663bda5dbd512829b3da221f1e0872743) ### 1 Docker-Ubuntu-Redis >工作目录:/home/erichan/docker-room/ubuntu-redis #### 1.1 制作镜像 ``