aoho求索

其他

还不会使用分布式锁?从零开始基于 etcd 实现分布式锁

为什么需要分布式锁?在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步本质上通过锁来实现。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。而在分布式环境下,数据一致性问题一直是难点。相比于单进程,分布式环境的情况更加复杂。分布式与单机环境最大的不同在于其不是多线程而是多进程。多线程由于可以共享堆内存,因此可以简单的采取内存作为标记存储位置。而进程之间甚至可能都不在同一台物理机上,因此需要将标记存储在一个所有进程都能看到的地方。常见的是秒杀场景,订单服务部署了多个服务实例。如秒杀商品有
2021年5月6日
其他

高性能消息中间件 NSQ 解析-窥探 nsq 设计思路(一)

消费,会因为消息处理时长、网络延迟等导致消息重排,再次消费顺序与写入顺序不一致,因此在高可靠性、顺序性方面略存在不足,应根据具体的业务场景进行取舍。源代码实现逻辑清晰明了,源码中使用了很多读写锁
2021年4月21日
其他

高性能消息中间件 NSQ 解析-nsqlookupd 实现细节介绍

apps/nsqlookupd/main.go:80options.Resolve(opts,
2021年4月5日
其他

高性能消息中间件 NSQ 解析-nsqd 的实现介绍

httpsServer,然后循环监控队列信息(n.queueScanLoop)、节点信息管理(n.lookupLoop)、统计信息(n.statsdLoop)输出。//
2021年3月25日
其他

MySQL读写分离,写完读不到问题如何解决

主从复制是一直在进行的,写后直接读的同时可能还有其他无关写操作,虽然主从有延迟,但是对于第一次写操作的同步已经完成,所以读操作已经可以读到最新的状态。对于第一个问题,需要使用主从复制的
2021年3月15日
其他

高性能消息中间件 NSQ 解析-应用实践

服务发现,适用于集群(cluster)版;消费消息的动作,主要逻辑就是打印出来,实际业务中需要进行其他处理。运行结果依次启动生产者和消费者的服务,可以分别看到如下的输出结果:$go
2021年3月14日
其他

高性能消息中间件 nsq 解析-介绍

具有如下特性:分布式:它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。易于扩展:它支持水平扩展,没有中心化的消息代理(
2021年3月3日
其他

如何使用 Go 更好地开发并发程序,纯干货!

的处理性能,但也带来了单个芯片发热过高和成本过高的问题,与此同时,受限于材料技术的发展,芯片中晶体管数量密度的增加速度已经放缓。也就是说,程序已经无法简单地依赖硬件的提升而提升运行速度。这时,多核
2021年2月25日
其他

几款符合 OpenTracing 规范的分布式链路追踪组件介绍与选型

OpenTracing,而无需关心后端采用的到底是什么分布式追踪系统,因此开发者可以无缝切换分布式追踪系统,也使得在通用代码库增加对分布式追踪的支持成为可能。OpenTracing
2021年1月24日
其他

2021 新一年的期望!谈谈数学期望在生活中的应用

41.67%。小结当然,我们如上的计算是在游戏奖品的实际价值等于标价的前提下,如果刨除掉虚高的标价,那么我们实际的期望值计算出来必然是小于
2021年1月3日
其他

正确规避常见的 Go 并发陷阱

作为一门并发性能优越的语言,Go虽然降低了协程并发开发的难度,但也存在一些「并发陷阱」,这就需要我们在开发时额外注意。我们再来介绍与Go
2020年12月23日
其他

没有 try-catch,该如何处理 Go 错误异常?

表达并可控。但当程序出现异常,如数组访问越界这类“意料之外”的错误时,它能够导致程序运行崩溃,此时就需要开发人员捕获异常并恢复程序的正常运行流程。接下来我们就介绍defer、panic
2020年12月16日
其他

如何使用 Prometheus 和 Grafana 监控预警服务集群?

本文作者:历小冰「监控和预警平台」是互联网公司较为重要的后端架构组成之一,是整个运维乃至整个产品生命周期中最重要的一环,它能够事前及时预警发现故障,事后提供详实的数据用于追查定位问题。Prometheus
2020年12月10日
自由知乎 自由微博
其他

周末漫谈 | 什么是 Serverless 架构

架构的未来。订阅最新文章,欢迎关注我的公众号参考阿里云文档https://blog.csdn.net/cc18868876837/article/details/90672971
2020年11月21日
其他

微服务架构中进行日志采集以及统一处理

微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中的日志收集方案
2020年11月10日
其他

微服务网关Zuul迁移到Spring Cloud Gateway

微服务架构中,断路器模式的作用也是类似的,当某个服务单元发生故障之后,通过断路器的故障监控,直接切断原来的主逻辑调用。关于断路器的更多资料和Hystrix实现原理,读者可以参考文末配套的书。
2018年9月24日
其他

Spring Cloud Gateway中的过滤器工厂:重试过滤器

从类图可以看到,GatewayFilter有两个实现类,但是在源码中寻找该接口的用法会发现,在GatewayFilterFactory实现类中有内部匿名类,实际是返回了一个
2018年4月25日
其他

认证鉴权与API权限控制在微服务架构中的设计与实现:授权码模式

之前系列文章《认证鉴权与API权限控制在微服务架构中的设计与实现》,前面文章已经将认证鉴权与API权限控制的流程和主要细节讲解完。由于有些同学想了解下授权码模式,本文特地补充讲解。
2018年4月4日
其他

Spring Cloud Gateway 入门

}将DiscoveryClient注入到DiscoveryClientRouteDefinitionLocator的构造函数中,关于该路由定义定位器,后面的源码分析会讲解,此处不展开。
2018年3月11日
其他

微服务架构中整合网关、权限服务

RequestContext.getCurrentContext().addZuulRequestHeader(SecurityConstants.USER_ID_IN_HEADER,
2017年12月11日
其他

微服务网关netflix-zuul

Cloud的项目中,引入zuul的starter,consul-discovery是为了服务的动态路由,这边没有用eureka,是通过注册到consul上的服务实例进行路由。
2017年11月14日
其他

认证鉴权与API权限控制在微服务架构中的设计与实现(四)

CustomSecurityFilter,与我们之前的讲解是一样的流程。主要依赖的三个接口都有在实现中实例化注入。看下父类的beforeInvocation方法,其中省略了一些不重要的代码片段。
2017年10月27日
其他

认证鉴权与API权限控制在微服务架构中的设计与实现(三)

checkPermission(CheckTokenEntitycheckTokenEntity)返回了check的结果。而其具体实现类则定义在Auth系统中。笔者项目中调用的实例如下:
2017年10月26日
其他

认证鉴权与API权限控制在微服务架构中的设计与实现(二)

上图展示了系统登录的简单流程,其中的细节有省略,用户信息的合法性校验实际是调用用户系统。大体流程是这样,客户端请求到达网关之后,根据网关识别的请求登录端点,转发到Auth系统,将用户的信息进行校验。
2017年10月25日
其他

认证鉴权与API权限控制在微服务架构中的设计与实现(一)

就可以完成身份校验。用户输入登录信息,发送到身份认证服务进行认证。AuthorizationServer验证登录信息是否正确,返回用户基础信息、权限范围、有效时间等信息,客户端存储接口。用户将
2017年10月24日