Celery最佳实践

翻译自原文https://devchecklists.com/celery-tasks-checklist/ 更加推荐RabbitMQ或者Redis作为生产环境中的broker 不要在task中使用复杂的对象作为参数,比如避免使用Django Model对象 # good @app.task def my_task(user_…

Read more

在腾讯云TKE/K8S上构建高可用RabbitMQ集群

确认环境需求 在构建之前先关注生产环境中RabbitMQ对环境的需求,可以从官方文档Production-checklist中获取很多关键信息https://www.rabbitmq.com/production-checklist.html VirtualHost 因为我们需要是搭建面向不同业务线和不同环境的多租户的RabbitMQ集群,所以需要根据不同的租户设置不同的VirtualHost User 针对不同租户设置不同用户,不同用户的权限细粒度可以单独控制 监控…

Read more

Minio源码解析

启动流程 检查Go运行版本是否大于1.9 绑定command参数 重点是server gateway server gateway update version 初始化cli.NewApp() 就是实例化了一个type App的对象 运行app实例…

Read more

NodeJS中的错误处理

所需知识 假设你已经熟悉JS、Java、Python、C++或者其他类似的语言中关于异常的知识,并了解throw和catch的意思 假设你已经熟悉NodeJS,并且对于异步操作以及诸如callback(err,result)这种完成异步操作的处理模式 假设你知道如下这种模式为什么无法处理异常 function myApiFunc(…

Read more

云服务应用架构指南之架构风格

云服务正在改变服务应用的设计方式,与传统单体架构不同的是,现在的云服务应用正被分解为更小、更加去中心化的模式。这些服务通过API或者异步信息或者时间来通信。应用通过按需增加实例的方式来进行水平扩展。 这些变化带来了新的挑战。应用状态变成了分布式,运维操作也变成了并行且异步的。整个系统对待错误发生需要保持弹性,部署必须是自动化并且可以预测的。监控和检测对于获取系统内部信息至关重要。 传统 VS 现代…

Read more

企业应用架构模式

分层 分层有利于标准化工作 层次并不能封装所有东西,有时会带来级联修改 过多的层级会影响性能 分层架构中最困哪的问题是决定建立那些层次以及每一层职责是什么 组织领域逻辑 领域逻辑的组织可以分为三种主要的模式:事务脚本、领域模型以及表模块 复杂逻辑情况的处理必然要引入对象,解决签署问题的面向对象方案是使用领域模型 面向对象/领域模型你要考虑的是什么事情安排到什么类中 做出抉择、…

Read more

Microservices in Action

Designing and running microservices Microservices collaborate with each other through technology-agnostic messaging protocols,either point…

Read more

Helm: 改善Kubernetes部署体验管理工具

什么是Helm? Helm, the Package Manager for Kubernetes 我们使用很多现代的编程语言或框架时,都会用到包管理器,来处理依赖、构建等相关的工作。K8S作为当下最为流行的容器编排系统,虽然功能强大,但其繁琐的配置和略显麻烦的使用体验还是带来了不少上手难度。因此诞生了像GitKube、…

Read more

领域驱动设计精粹Domain-Driven-Design Distilled

好、坏、高效的设计 我们有很多同学沉醉于开发周期的紧张安排中,并没有做出合适的设计 软件开发被考虑为成本 开发者沉迷于追求技术,但忽视了与具体问题相结合来考虑,缺乏思考和设计 数据库和数据模型的设计给予过高优先级,然后忽略了流程和操作的设计 开发者与业务逻辑模型的命名并没有保持一致,所以在开发后会有很大偏差 项目乐观预估时间,或者有时间枷锁产生大泥球架构…

Read more

DDD领域驱动设计

为什么我们需要DDD 领域专家与开发者一起工作,准确传达业务规则 业务产品文档难以系统描述技术抽象实现 设计就是代码、代码就是设计。设计是关于软件如何工作的,最好的编码设计来自于多次试验。 DDD同时提供了战略设计和战术设计两种方式,战略设计帮助我们分析哪些投入是最重要的,哪些软件资产是可以重新拿来使用的。战术设计则是帮助我们构建DDD模型中各个部件 d当我们在复杂性问题上犯错时,我们很难轻易地扭转颓势。这意味着我们应该在项目早期计划便对简单性和复杂性作出判断,…

Read more

Kubernetes 1.10版本安装启用CoreDNS

从Kubernets 1.9版本开始是可以使用Kubeadm工具在安装Kubernetes时指定CoreDNS作为默认的服务发现机制。不过在1.9版本时,Kube-dns和CoreDNS的配置还无法完美迁移,到1.10时,CoreDNS进入Beta版本后这个问题就得到解决了。所以我们就以K8S 1.10版本安装CoreDNS为例。 使用Kubeadm安装全新K8S时启用CoreDNS 在使用Kubeadm全新安装K8S时可以采用如下命令开启 # kubeadm…

Read more

Rancher 2.0 速览

Rancher能够将Kubernetes的使用成本降低,极大的促进了DevOps的推广和流行 主要特性 能管理运行部署在任何地方的K8S 满足运维日常的关于账号、权限的管理需求,并且能直观的看到集群的运行状态、使用情况 提供了诸如Rancher catalog这样便利的工具,可以快速搭建服务 架构概览 它基于以下几种成熟的技术做的设计: Docker Kubernetes…

Read more

设计可伸缩、可移植的Docker容器网络

Docker 容器包装一系列运行程序到一个完整的文件系统中,包含代码、runtime运行时、系统工具、系统库等,这保证了程序能够运行在相同且独立的环境。通常情况下,容器将程序与底层架构隔离,提供了相对统一的一层封装。 如何让运行在容器中的程序相互之间通信,如何与宿主机Host通信,如何与外部网络通信呢? 如何设计一个适合程序迁移、提供服务发现、…

Read more