avatar
Articles
40
Tags
37
Categories
0

Utopian

Utopian

Introduct to temporalio
Created2023-09-18
Temporalio 简介简介引用wiki来介绍工作流引擎的定义: A workflow engine manages and monitors the state of activities in a workflow, such as the processing and approval of a loan application form, and determines which new activity to transition to according to defined processes (workflows). The actions may be anything from saving an application form in a document management system to sending a reminder e-mail to users or escalating overdue items to management. A workflow engine facilitates the flow of information, ...
Introduct to go-clean-template
Created2023-09-18
简介go-clean-template是一个golang的微服务模板,按照Robert Martin《代码整洁之道》的各原则来实现。业务方可以使用该模板来扩展构建自己的微服务。 提供的能力项包括: 按照DIP、ISP等原则来组织框架层、业务逻辑层以及数据层等代码实现。 配置文件解析,包括端口号、日志、PG等RabbitMQ配置。 集成gin框架,提供了几个HTTP接口demo实现。 集成了RabbitMQ RPC,提供了1个接口的demo实现。 集成了日志、Swagger、K8s probe、Prometheus上报等能力。 本项目主要是作为模板来演示如何构建可扩展、易于维护的微服务,因此在实现上比较简单,业务方可以根据实际需求进一步改造扩充。 工程架构 启动方式 README中给出了docker的构建方式,也可以将相关代码copy出来之后自行go build构建。 注意服务依赖RabbitMQ、PostgreSQL,启动前需要搭建对应的容器或者实例。 目录结构 cmd: cmd处理逻辑。 config:配置解析 docker-compose.yml: Image构 ...
使用腾讯云cos+cdn搭建图片服务器
Created2022-03-05
背景之前在网上找了不少存储图片的地儿,貌似都不是很靠谱。也研究了一下腾讯云,似乎也没有提供直接可用的图片存储服务。看网上的经验有人使用腾讯云cos+cdn直接搭建了一个个人的图片存储服务,感觉流程也挺简单,于是研究后操作了一番,发现也有不少弯路,于是记录一番。 cos基础对象存储COS为腾讯云提供的云存储服务,可以简单的理解为云硬盘,可以通过页面、接口上传文件到特定的目录(实为bucket)。具体流程就不介绍了,参考官方文档。 创建bucket之后,每个bucket会有一个独立的访问域名,可以通过http域名直接访问文件。注意需要先将存储桶访问权限改为”公有读私有写“。 这样一个简单的文件上传、下载服务器就搭建好了。可以直接在文件列表中上传、下载文件以及管理工作。 优化上传通过页面上传肯定不是一个好的方案,上传每次都要通过腾讯云页面操作,成本太高。 Mac下有个很方便的工具uPic,可以方便的上传到cos。可以直接从git release下载,应用市场也提供了收费版本。uPic支持多种图床用作存储服务,包括腾讯云cos。我用的git免费版本,cos图床配置大致如下: 注意点: ...
秒杀系统核心设计
Created2022-03-02
最近阅读量大量关于秒杀系统的介绍文章,包括一些视频讲解,大部分文章都太冗长,没有触及核心设计点,本文主要总结下后台架构的核心设计要点,不讨论架构优化中的常规页面CDN化、隔离部署、数据sharding、缓存优化等常规手段。 背景秒杀系统场景举例: 抢购:如双十一,下单量高峰能达到50w+ qps,注意是下单成功,同时参与抢购的人的那就更多一个数量级了。 红包:直播间红包、微信红包,本质上都是类似的场景,微信红包的处理方案是提前对红包进行个数拆分,会简化扣除库存逻辑,但是本质上跟抢购类似。 此类系统有几个典型特点: qps高,tps低:即读多写少,大量的请求(包括非正常请求:如频繁重试、黑产请求等)但是只有少量能成交。 库存需要精确:涉及金额,不允许超卖 固定时间:活动时间通常通常很短 其中超卖问题为核心需求点,基于此衍生出如何抗住并发量、用户体验优化等解决方案。 简单方案先考虑一个简单的实现方案,然后基于此方案的问题进行优化。 存储模型以DB为例,考虑拆分如下几个表: 秒杀活动信息表: 用于新建秒杀活动,包括活动信息、时间段、秒杀商品等 商品表:存储商品详细信息 库存表s ...
Microservices in Action
Created2022-01-10
《微服务实战》读书笔记 微服务的定义三大关键特性 每个微服务只负责一个功能 每个微服务都有自己的数据存储 // 低耦合,只能通过接口访问对方数据 微服务自己负责编排和协作 // 高内聚? 两个基本特性 可独立部署 // 非庞大的单体应用 可替代 微服务架构原则 自治性:松耦合,可独立部署 可恢复性:故障隔离,模块故障仅影响微服务自身。 // 是不是叫“隔离”更加合适 透明性:每个微服务有完整的日志、监控以及基础设施数据 自动化:保障系统频繁部署和运维的正确性,通过引入流水线or云函数 一致性:微服务需要考虑向后兼容,确保不需要强迫其他团队升级或者破坏服务之间的复杂交互。 为何选择微服务 技术差异性:允许根据服务的特性选择不同的技术栈 系统复杂度会逐步增加:不断缩短的交付周期 降低重复和风险:灵活性、部署风险 微服务的设计、运维挑战 划定微服务范围需要领域知识:如何划分某个服务的职责需要对领域有充分的理解。 良好的契约设计 // 多团队设计,需要服 ...
Open Tracing
Created2022-01-07
最近在阅读微服务相关书籍时,提到了微服务相关的监控措施,其中分布式追踪就属于其中不可或缺的一部分,恰好之前也有计划在团队内引入,所以就花了两天时间稍微深入了解了一下相关概念和实现。动手实验了一遍jaeger提供All-In-One+HotROD示例,也大致了解了其基本原理和实现思路。时间关系就没有去学习jaeger之类的系统源码了,深入了解其存储方案之类的细节了,感觉必要性不大。 为什么需要Tracing微服务在部署上线后,需要有一套完善的监控体系来监控服务的质量。可观察性就是更关注的是从系统自身出发,去展现系统的运行状况,为开发运营人员提供故障排查、维护及优化的相关信息。 可观察性目前主要包含以下三大支柱: 日志(Logging):Logging 主要记录一些离散的事件,应用往往通过将定义好格式的日志信息输出到文件,然后用日志收集程序收集起来用于分析和聚合。虽然可以用时间将所有日志点事件串联起来,但是却很难展示完整的调用关系路径; 度量(Metrics):Metric 往往是一些聚合的信息,相比 Logging 丧失了一些具体信息,但是占用的空间要比完整日志小的多,可以用于监控 ...
Application Tracking
Created2021-12-04
整理下目前业务已有的监控能力以及相关指标、维度。大部分开发关注的可能只是自身服务的质量,缺乏对整体链条监控的了解。业务的发展过程中,出现过太多非后端服务质量导致的异常,所以要求开发能对服务整体的监控能力有所了解。 后台逻辑服务层后端逻辑服务,目前主要基于123+007平台。 【下游】trpc主调 指标:请求量、耗时、失败率(区分超时、异常) 维度:(下游)服务-接口、ip、返回码 【自身】trpc被调 指标:请求量、耗时、失败率(区分超时、异常) 维度:(本服务)服务名-接口、ip、返回码 【自身】trpc属性监控 指标:业务自定义指标,包括trpc框架自动上报性能指标,如goroutine数、node event loop lag等。 维度:可按单机展开 【自身】容器负载 指标:cpu、内存、磁盘、带宽 维度:可按单机展开 总结 优势:对下游监控完善,容器负载监控可以覆盖自身大部分异常 不足:服务内部异常(如内部block导致出现服务毛刺等)依赖业务自身上报【自身异常也可以通过上游发现】 业务接入层实现取决于业务团队能力,小团队一般直接用nginx ...
Reliable Cron across the Planet
Created2021-10-10
Written with StackEdit. Reliable Cron across the Planet…or How I stopped worrying and learned to love time Štěpán Davidovič, Kavita Guliani, Google 原文: https://queue.acm.org/detail.cfm?id=2745840 前段时间预研分布式任务调度系统的方案,了解到了一个比较靠谱的解决方案:dkron,看介绍其实现就是基于基于google的这篇whitepaper 《Reliable Cron across the Planet》。 这篇文章也被收录到了书籍《SRE:google运维解密》一书中(第24章),于是将部分内容摘抄了一遍,补充了部分自己的理解,当做自己的读书笔记了。文章较长,部分个人认为不重要的内容就简单跳过了。 本文主要介绍了google的cron调度服务的实现机制,重点对实现的难点部分做了详细介绍。详见下文。 先对Cron系统的功能做了个简单的介绍。包括单机下crontab格式以及linux下的cr ...
libuv-source
Created2021-10-04
libuv源码简介习惯了思维图之类的简单整理之后,有一段时间没有认真写写东西了。前段时间为了研究下node的性能指标,特意复习了一下libuv的源码,但是一直懒得去整理,直到今天看到这段话后才决定整理一番: 学习是一种行动反射,不是为了晓得些『知识』,要切己体察,代入自己要事上琢磨,落实行动,这就是知行合一。否则,读书也是一种玩物尚志。 定期总结也是学习的一部分。 简介 libuv是个异步服务的框架,整体实现及功能先看一下libuv官网的这张分层结构图。 底层根据操作系统类型,选择不同的多路复用实现。linux下基本就是epoll了。据说nodejs选择libuv而非libev作为底层实现,是因为libuv等windows的支持更为友好(IOCP)。具体没有对比详细对比过。 uv__io_t:从底层看,上层大部分的操作都跟io有关,或者可以转换为io操作。如tcp/udp的网络IO,tty的相应,signal的处理、pipe读写等。所以libuv封装了一层IO“基类”,工其他handler使用。 Handler:TCP、UDP、Pipe等,定位类似libeven ...
Introduction-to-memberlist
Created2020-12-26
memberlist实现分析gossip简介Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。这个协议的作用就像其名字表示的意思一样,非常容易理解,它的方式其实在我们日常生活中也很常见,比如电脑病毒的传播,森林大火,细胞扩散等等。 Gossip的基本思想一个节点想要分享一些信息给网络中的其他的一些节点。于是,它周期性的随机选择一些节点,并把信息传递给这些节点。这些收到信息的节点接下来会做同样的事情,即把这些信息传递给其他一些随机选择的节点。一般而言,信息会周期性的传递给N个目标节点,而不只是一个。这个N被称为fan-out(扇出)。 数据一致性问题的背景&目标问题: 如何在多网络中将多个节点实现并保持数据一致性。 能够随着节点数量的增加而优雅地扩展。 考量的因素: 单节点信息变更后,更新传播到所有其他节点所需的时间 传播单个更新时生成的网络流量 机制在《Epidemic Algorithms for Replicated Database Maintenance》论 ...
1234
avatar
Alex guo
个人技术博客
Articles
40
Tags
37
Categories
0
Follow Me
Recent Post
Cache In Next.js2024-03-25
Introduct to NotionAPI2024-01-06
Architecture of Supabase2023-12-28
Introduct-to-nocoDB2023-12-08
Doploy outline without docker2023-12-06
Tags
秒杀 Microservices Architecture Governance nginx 远程开发 Golang UUID cron memberlist 分布式 memos Git Readingnotes CMS 云函数 RWMutex BaaS redis AUTH golang docker Notion Next.js libuv groupcache gossip Outline Authentication COS nocoDB Supabase HTTPS 工作流引擎 随笔 Vscode Puppeteer
Archives
  • March 20241
  • January 20241
  • December 20233
  • November 20232
  • October 20233
  • September 20232
  • March 20222
  • January 20222
Info
Article :
40
UV :
PV :
Last Update :
©2020 - 2024 By Alex guo
Framework Hexo|Theme Butterfly