Go语言中文网 为您找到相关结果 24

微服务实战(一):微服务架构的优势与不足

【编者的话】本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。正如作者所说,微服务架构更适合用于构建复杂的应用,尽管它也有自己的不足。 这篇文章作者是Chris Richardson,他是早期基于Java的Amazonite EC2 PaaS平台CloudFoundry.com的创始人。现在他为企业提供如何开发和部署应用的咨询服务。他也经常在http://microservices.io上发表有关微服务的文章。 微服务正在博客、社交媒体讨论组和会议演讲中获得越来越多的关注,在Gartner的2014 Hype Cycle上它的排名非常靠前。同时,软件社区中也有不少持怀疑论者,认为微服务不是什么新东西。Naysayers认为这就...阅读全文

博文 2016-02-29 11:00:20 hokingyang

微服务实战(四):服务发现的可行方案以及实践案例

这是关于使用微服务架构创建应用系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点。第二和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现相关问题。 为什么要使用服务发现?设想一下,我们正在写代码使用了提供REST API或者Thrift API的服务,为了完成一次服务请求,代码需要知道服务实例的网络位置(IP地址和端口)。传统应用都运行在物理硬件上,服务实例的网络位置都是相对固定的。例如,代码可以从一个经常变更的配置文件中读取网络位置。 而对于一个现代的,基于云微服务的应用来说,这却是一个很麻烦的问题。其架构如图所示: 服务实例的网络位置都是动态分配的,而且因为扩展、失效和升级等需求,服务实例会经常动态改变,因此,客户端代码需要使用一种更加复杂...阅读全文

博文 2016-03-04 10:25:26 hokingyang

一致性hash算法原理及golang实现

概述 这里存在一种场景, 当一个缓存服务由多个服务器组共同提供时, key应该路由到哪一个服务.这里假如采用最通用的方式key%N(N为服务器数目), 这里乍一看没什么问题, 但是当服务器数目发送增加或减少时, 分配方式则变为key%(N+1)或key%(N-1).这里将会有大量的key失效迁移,如果后端key对应的是有状态的存储数据,那么毫无疑问,这种做法将导致服务器间大量的数据迁移,从而照成服务的不稳定. 为了解决类问题,一致性hash算法应运而生. 1. 一致性hash算法特点 在分布式缓存中, 一个好的hash算法应该要满足以下几个条件: 均衡性(Balance) 均衡性主要指,通过算法分配, 集群中各节点应该要尽可能均衡. 单调性(Monotonicity) 单调性主要指当集群发生...阅读全文

博文 2016-09-10 16:00:01 u010511236

Go负载均衡

负载均衡 请求者向均衡服务发送请求type Request struct { fn func() int // The operation to perform. c chan int // The channel to return the result. } 注意这返回的通道是放在请求内部的。通道是first-class值 能很好的模拟一个请求者,一个负载产生者func requester(work chan<- Request) { c := make(chan int) for { // Kill some time (fake load). Sleep(rand.Int63n(nWorker * 2 * Second)) work <- Request{workFn, c} // ...阅读全文

博文 2017-03-05 19:45:34 紫若丹枫

MongoDB 3.0新增特性一览

插件式存储引擎APIMongoDB3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MySQL的设计理念。目前除了早期的MMAP存储引擎外,WiredTiger和RocksDB均已完成了对MongoDB的支持,前者更是在被MongoDB公司收购后更是直接引入到了MongoDB3.0版本中。插件式存储引擎API的引入为MongoDB丰富自己武器库以处理更多不同类型的业务提供了无限可能,内存存储引擎、事务存储引擎甚至Hadoop在未来都有可能接入进来。WiredTiger存储引擎如果说插件式存储引擎API为MongoDB3.0打造了一个武器库,那么WiredTiger绝对是武器库中第一枚也是最重要的一枚重磅炸弹。因为MMAP存储引擎自身的天然...阅读全文

博文 2015-07-28 23:00:01 散关清渭

开源负载均衡组件GLB Director

GLB Director 是 GitHub 开源的负载均衡器,定位为更好的数据中心负载均衡器。 GLB Director 是第4层负载均衡器,可在大量物理机器上扩展单个 IP 地址,同时尝试在修改期间最大限度地减少连接中断。GLB Director 不会替换像 haproxy 和 nginx 这样的服务,而是部署在这些服务(或任何 TCP 服务)之前,允许它们跨多个物理机器扩展,而不需要每台机器都有唯一的 IP 地址。 ![image](https://static.oschina.net/uploads/space/2018/0809/175126_FS7j_2720166.png...阅读全文

开源项目 2018-08-09 18:30:00 网友

Golang负载均衡服务器goproxy

goproxy是使用golang实现的一个基本的负载均衡服务器,支持缓存(使用redis);反向代理,目前支持6种模式: 1. 随机分发; 2. IP HASH两种模式; 3. 轮询(Round Robin)法; 4. 加权轮询(Weight Round Robin)法; 5. Power of Two Choices (P2C)算法; 6. 边界一致性哈希算法(Consistent Hashing with Bounded Loads)。 另外,对转发的请求有较大的控制度,可以控制代理特定的请求,屏蔽特定的请求,甚至可以重写特定的请求。 另外,有时候项目需要用到第三方的服务并对返回的数据进行自定义修改,调用第三方的API,利用proxy server可以很容易的控制第三方...阅读全文

gRPC服务发现与负载均衡

1)简介gRPC负载平衡的主要实现机制是外部负载平衡,即通过外部负载平衡器来向客户端提供更新后的服务器列表。gRPC客户端也内置对少量几种负载平衡策略API的支持,其中包括grpclb策略(该策略实现了外部负载平衡),但并不鼓励用户在gRPC中添加更多的策略。新的负载平衡策略应该在外部负载平衡器中实现。2)工作流负载平衡策略在名称解析和服务器连接方面与gRPC客户端相适应,以下是其工作方式: 1.首先,gRPC客户端会发出对服务器名称解析的请求,该名称会被解析为一个或多个IP地址,每一个地址会标明它是服务器地址还是负载平衡器地址,并且服务配置中会注明客户端所选用的负载平衡策略(例如,round_robin或grpclb)。2.客户端实例化负载平衡策略。注:如果地址解析器返回的任何一个地址是平...阅读全文

博文 2017-09-20 07:34:52 Jay_Guo

高性能第 4 层负载均衡器Katran

Katran 是 Facebook 开源的高性能第 4 层负载均衡器,目前在 Facebook 内部处于孵化阶段。Katran 提供了一个软件解决方案,用于使用称为 eXpress Data Path 和 eBPF 虚拟机的最新内核工程开发进行负载均衡。 Katran 被部署在 Facebook 的网络中。 **主要功能特性** 快速(特别是在驱动模式下的 w/ XDP) 性能与多个 NIC 的 RX 队列呈线性关系 RSS 友好的封装 ![image](https://static.oschina.net/uploads/space/2018/0529/180004_B8x5_2903254.png...阅读全文

gRPC源码/负载均衡

本文以roundRobin为例介绍gRPC负载均衡实现。 代码 https://github.com/messixukej... 在liangzhiyang/annotate-grpc-go基础上补充了部分注释 关键interface 负载均衡器: type Balancer interface{ //启动负载均衡器,dialing的时候调用。 Start(target string, config BalancerConfig) error //通知负载均衡器由新地址连接ok Up(addr Address) (down func(error)) //获取下一个有效的负载均衡地址 Get(ctx context.Context, opts BalancerGetOptions) (addr...阅读全文

博文 2018-06-10 10:34:36 蓝白狂想

DockOne微信分享(九十六):爱油科技基于SpringCloud的微服务实践

【编者的话】本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括: 微服务架构的分层和框架选型服务发现和配置管理服务集成和服务质量保证基于领域驱动设计实施DevOps 从单体应用到微服务单体应用对于单体应用来说,优点很多,例如: 小而美,结构简单易于开发实现部署门槛低,单个Jar包或者网站打包即可部署可快速实现多实例部署 然而随着业务复杂性的上升,业务规模的扩大,缺点也显现出来,例如: 随着业务发展更多的需求被塞进系统,体系结构逐渐被侵蚀反应堆林立被技术绑架,难以为特定业务选择平台或框架,尽管可能有更适宜的技术做这件事协作困难,不同业务的团队在一个系统上进行开发相互冲突难以扩展,为了热点业务而不得不同时扩容全部业务,或者难以继续扩容 ...阅读全文

博文 2017-06-25 16:25:25 starlight36

Kubernetes 落地案例|将 Pokémon Go 运行到谷歌云上

背景知识: 《Pokémon Go》是由任天堂、Pokémon 公司和谷歌 Niantic Labs 公司联合制作开发的现实增强(AR)宠物养成对战类 RPG 手游。——百度百科 这些年的工程师生涯中,我参与过很多产品的发布,这些产品一般都是慢慢地拥有了上百万的用户。通常,产品在发布几个月后,产品新功能发布和架构都进行了调整,用户量才会渐渐上升。但是在谷歌云客户 Niantic 发布 Pokémon Go 时,一切好像都没有按照常理出牌,从中我体验到前所未有的成长。 在技术社区,同行曾经询问过支撑起 Pokémon Go 如此庞大用户量的系统采用了什么基础设施。希望将 Pokémon Go 运行起来。所以,Niantic 和 Google 的团队将支撑起 Pokémon Go(目前世界上最流...阅读全文

Traefik反向代理

Traefik Traefik是一个用Golang开发的轻量级的Http反向代理和负载均衡器。由于可以自动配置和刷新backend节点,目前可以被绝大部分容器平台支持,例如Kubernetes,Swarm,Rancher等。由于traefik会实时与Kubernetes API交互,所以对于Service的节点变化,traefik的反应会更加迅速。总体来说traefik可以在Kubernetes中完美的运行. 由于微服务架构以及 Docker 技术和 kubernetes 编排工具最近几年才开始逐渐流行,所以一开始的反向代理服务器比如 nginx、apache 并未提供其支持,毕竟他们也不是先知;所以才会出现 Ingress Controller 这种东西来做 kubernetes 和前端负...阅读全文

一致性hash算法原理及golang实现

概述 这里存在一种场景, 当一个服务由多个服务器组共同提供时, key应该路由到哪一个服务.这里假如采用最通用的方式key%N(N为服务器数目), 这里乍一看没什么问题, 但是当服务器数目发送增加或减少时, 分配方式则变为key%(N+1)或key%(N-1).这里将会有大量的key失效迁移,如果后端key对应的是有状态的存储数据,那么毫无疑问,这种做法将导致服务器间大量的数据迁移,从而照成服务的不稳定. 为了解决类问题,一致性hash算法应运而生. 1. 一致性hash算法特点 在分布式缓存中, 一个好的hash算法应该要满足以下几个条件: 均衡性(Balance) 均衡性主要指,通过算法分配, 集群中各节点应该要尽可能均衡. 单调性(Monotonicity) 单调性主要指当集群发生变化...阅读全文

DockOne微信分享(一二二):探索Kubernetes的网络原理及方案

【编者的话】2016年ClusterHQ容器技术应用调查报告显示,一年来容器技术应用于生产的比例增长了96%,Kubernetes的使用率达到了40%,成为了最受欢迎的容器编排工具;那么Kubernetes到底是什么呢?它是一个用于容器集群的自动化部署、扩容以及运维的开源平台;那么通过Kubernetes能干什么呢?它能快速而有预期地部署你的应用,极速地扩展你的应用,无缝对接新的应用功能,节省资源,优化硬件资源的使用。随着Kubernetes王者时代的到来,计算、网络、存储、安全是Kubernetes绕不开的话题,本次交流与大家分享下Kubernetes网络原理及方案。 【3 天烧脑式 Docker 训练营 | 上海站】随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛。本次...阅读全文

博文 2017-06-25 16:25:41 有容云

微服务注册中心注册表与hashcode实现golang版

背景 基于负载均衡的服务调用 基于负载均衡的服务相互调用指的是通过基于Lvs、Haproxy、Nginx等负载均衡软件来构建一个负载均衡服务,所有的服务调用都通过负载均衡器 从负载均衡的这种模式下其实有两个主要的问题: 一是中心化,整个系统都基于负载均衡器,负载均衡就相当于整个业务的中心,虽然我们可以通过一些高可用手段来保证,但其实内部流量通常是巨大的,很容易出现性能瓶颈二是增加了一次TCP交互 当然也有很多好处,比如可以做一些负载均衡、长链接维护、分布式跟踪等,这不是本文重点 基于注册中心的服务调用 所有的服务都启动后都通过注册中心来注册自己,同时把注册中心里面的服务信息拉回本地,后续调用,就直接检查本地的服务和节点信息来进行服务节点的调用 注册中心中的注册表 每个服务节点都会来注册中心进...阅读全文

Ingress controller之trarfik

Traefik,它是一个用Golang开发的轻量级的Http反向代理和负载均衡器,虽然相比于Nginx,它是后起之秀,但是它天然拥抱kubernetes,直接与集群k8s的Api Server通信,反应非常迅速,实时感知集群中Ingress定义的路由规则集合和后端Service、Pod的变化,自动热更新Traefik后端配置,根本不用创建Ingress controller对象,同时还提供了友好的控制面板和监控界面,不仅可以方便地查看Traefik根据Ingress生成的路由配置信息,还可以查看统计的一些性能指标数据,如:总响应时间、平均响应时间、不同的响应码返回的总次数等,Traefik部署请参考官网用户示例Kubernetes Ingress Controller。不仅如此,Traefi...阅读全文

博文 2019-10-22 01:32:50 aside section._1OhGeD

k8s中负载均衡器【ingress-nginx】部署

在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案: NodePort LoadBalancer Ingress 本节主要就ingress和ingress控制器ingress-nginx-controller的部署作简单介绍和记录。 以下系统组件版本: 云服务器:centos版本7.6.1810、k8s版本1.15.0、docker版本18.06.1-ce、ingress-nginx-controller版本0.25.0 Ingress Ingress 组成? 将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的...阅读全文

博文 2019-10-16 11:02:46 小碗汤

业务容器化最佳实践--优雅退出

kubernetes的重要性已经不言而喻了,目前不少的企业已经选择将自己的业务运行在kubernetess上。我本人在多家企业落地kubernetes,也和很多企业负责人聊过类似话题。我们发现很多人把业务容器化简单理解为dockerfile + 原有代码。这是不对的,新的运行形态就决定了我们的代码必须做相应的适配,才可以充分发挥kubernetes的强大。本系列文章主要讲述业务容器化最佳实践,希望对大家有所帮助。 今天我们主要阐述 应用优雅退出。 不要把代码架构的失败归结于Kubernetes 开源的世界里,大家已经习惯了引入各种框架来解决自己的问题,但是我们都知道技术的世界是没有银弹的。 我在早期参加一些meetup的时候,很多来参会的人会提出一个问题:如何在pod缩容的时候,避免5xx?...阅读全文

博文 2020-01-16 17:32:39 iyacontrol

利用Prometheus 打造企业分布式监控平台(8)--VictoriaMetrics集群

在之前的系列文章中,我们讲到了一个远程存储对于企业级Prometheus的重要性,以及Thanos和VictoriaMetrics的对比。今天我们主要讲VictoriaMetrics,包括集群部署和如何与Prometheus结合。 VictoriaMetrics是一个高性能,低成本,可扩展的时序数据库。可以用来做Prometheus的长期存储。分为单机版本和集群版本,均已开源。如果数据写入速率低于每秒​​一百万个数据点,官方建议使用单节点版本而不是集群版本。 当然单机版本配置简单,可以通过纵向扩展的方式来提升性能。不过作为一个企业级的监控系统,选择集群版本,也就是选择横向扩展。 架构预览 VictoriaMetrics集群包含下面三个组件: vmstorage- 存储数据 vminsert-...阅读全文

博文 2020-04-24 14:33:09 iyacontrol

深度解读k8s1.17新特性

Kubernetes 1.17的发行版引入了一些强大的新功能,并且看到其他功能趋于成熟或趋于普遍可用。此概述提供了一些最值得注意的更改的摘要,其中包括: 集群网络和路由控制以及可伸缩性方面的重大改进; 集群存储,pod调度和运行时选项的新功能; 更好的自定义资源支持。 请注意,要尝试这些功能,您将需要有权访问运行Kubernetes 1.17的集群,并且在某些情况下还需要为Kubernetes组件设置启用某些新功能。托管Kubernetes集群通常不支持最新的Kubernetes版本,或者不允许用户启用alpha或beta功能。您可以使用诸如kubeadm或kops之类的工具在裸机或云提供商的虚拟机服务上安装特定版本的Kubernetes。 EndpointSlice API Graduat...阅读全文

博文 2019-12-12 12:32:39 iyacontrol

线上大量CLOSE_WAIT的原因深入分析

本文载自 https://juejin.im/post/5c0cf1ed6fb9a04a08217fcc 这一次重启真的无法解决问题了:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程。 近日遇到一个线上服务 socket 资源被不断打满的情况。通过各种工具分析线上问题,定位到问题代码。这里对该问题发现、修复过程进行一下复盘总结。 先看两张图。一张图是服务正常时监控到的 socket 状态,另一张当然就是异常啦! 图一:正常时监控 图二:异常时监控 从图中的表现情况来看,就是从 04:00 开始,socket 资源不断上涨,每个谷底时重启后恢复到正常值,然后继续不断上涨不释放,而且每次达到峰值的间隔时间越来越短。 重启后,排查了日志,没有看到 panic ...阅读全文

博文 2020-03-27 16:32:57 耐心的农夫2020

理解Kubernetes网络:ingress篇

在本系列的第一篇文章中,我讲了Pod跨Kubernetes集群中的节点相互连接的网络。第二篇重点讲了服务网络如何为Pod提供负载平衡,以便群集内的客户端可以与它们可靠地通信。对于这第三篇也是最后一篇文章,我想以这些概念为基础来展示集群外的客户端如何使用同一服务网络连接到Pod。由于各种原因,这很可能是三篇涉及最多的,并且掌握前两篇关于pod和service的内容是理解本篇的的前提。 路由并不是负载均衡 在上一篇文章中,我们创建了一个具有两个Pod的部署,并为该服务分配了一个IP,称为“集群IP”,针对Pod的请求已发送到该IP。我将在此处继续根据该示例进行构建。回想一下,该服务的群集IP 10.3.241.152位于与Pod网络以及节点本身所在的网络不同的IP地址范围内。我称这个地址空间为“...阅读全文

如何在Kubernetes中将Envoy用作负载均衡器

在当今分布式的世界中,单体架构越来越多地被多个,更小,相互连接的服务(不管是好是坏)所取代,代理和负载平衡技术似乎正在复兴。除了老玩家以外,近年来还涌现出几种新的代理技术,它们以各种技术实现,并以不同的功能进行普及,例如易于集成到某些云提供商(“云原生”),高性能和低内存占用,或动态配置。 可以说,两种最流行的“经典”代理技术是NGINX(C)和HAProxy(C),而其中的一些新成员是Zuul(Java),Linkerd(Rust),Traefik(Go),Caddy(Go)和Envoy(C++)。 所有这些技术具有不同的功能集,并且针对某些特定场景或托管环境(例如,Linkerd经过微调,可在Kubernetes中使用)。在本文中,我将不做这些比较,而只是关注一个特定的场景:如何将Env...阅读全文

博文 2020-02-21 11:32:42 iyacontrol