Bryan Blog

个人分享 但愿各位看官喜欢

基于 OpenAPI 的 Web 页面自动渲染实践

Practice of Automatic Rendering of Web Pages Based on OpenAPI

背景信息 最近接手的项目中遇到一个新的需求,需要对原有的机器学习相关的接口进行切换,因为机器学习算法训练包含的参数比较多,结构也比较复杂,参数之前存在复杂的动态依赖关系。更麻烦的问题在于前端 Web 页面是基于接口结构与字段类型进行渲染的,同时为了支持基于接口渲染出前端页面,前人使用的技术方案如下所示: 可以看到基于接口需要去管理后台进行参数的配置,管理后台为了前端逻辑的展示的需要,定...

FATE Flow 源码解析 - 日志输出机制

FATE Flow source code analysis - log mechanism

背景介绍 在 之前的文章 中介绍了 FATE 的作业处理流程,在实际的使用过程中,为了查找执行中的异常,需要借助运行生成的日志,但是 FATE-Flow 包含的流程比较复杂,对应的日志也很多,而且分散在不同的文件中,在这篇文章中就对 FATE-Flow 的日志机制进行梳理,帮助大家了解 Python 服务中实现一个更加灵活的日志机制 logging 机制 FATE-Flow 中日志主要基于...

FATE Flow 源码解析 - 资源分配流程

FATE Flow source code analysis - resource allocation process

背景介绍 在 上一篇文章 中介绍了 FATE 的作业处理流程,对于资源管理没有深入介绍,本篇文章就是来补充相关细节。 众所周知,FATE 是一个联邦学习框架,涉及了多个参与方(FATE 中叫站点)进行模型的训练,而各个参与方的训练过程都需要使用 CPU 资源和内存资源,因此在作业执行前需要提前先申请好必要的资源,才能避免在执行中避免因为资源不足而导致执行失败。 而 FATE 中单个作业会包...

FATE Flow 源码解析 - 作业提交处理流程

FATE Flow source code analysis - task submission process

背景介绍 FATE 是隐私计算中最有名的开源项目了,从 star 的数量上来看也可以看出来。截止 2023 年 3 月共收获 4.9k 个 star,但是 FATE 一直被认为代码框架复杂,难以理解,作为一个相关的从业者,后续会持续对 FATE 项目的源码进行解析,方便对隐私计算感兴趣的后来者提供一点点帮助。 本文主要基于 FATE-Flow 2022 年 12 月发布的版本 v1.10...

基于 Grpc interceptors 的请求跟踪探索

Exploration of request tracking based on grpc interceptors

背景信息 最终参与一个涉及比较大量 gRPC 服务调用的项目,内部调用链路比较复杂,追踪 bug 涉及的信息链路也很长,导致追踪问题比较困难。今天在跟踪特定问题时,发现部分链路日志缺失,而且执行链路比较难追踪,于是想到之前 Web 服务中为了方便异常追踪,会统一注册,将所有的请求与返回都打印出来,并通过唯一的 id 去串联完整处理链路,通过这种方式执行链路会变得特别清晰,调试问题也变得很方便...

基于 cookiecutter 的 python 项目模板

Python project template based on cookiecutter

Cookiecutter 介绍 使用 Python 这种动态语言进行 web 开发,团队中经常会遇到的问题就是代码的质量比较难控制。Python 语言本身灵活性比较高,不加控制的情况下代码质量可能最后很难维护。而且代码的各方面的标准,比如提示的 lint,代码格式化等等如果不加规范,不同开发者的协作也会比较困难。因此从公司角度来看,一个统一的代码规范是很有必要的。 在 Python 的开...

Python 中的时区问题

Timezone problem in python

问题背景 使用 Python 进行了许久的开发,一直没有踩到时区的坑,最近新的业务中引入了比较多的服务,而且使用 grpc 进行数据通讯,不幸踩到了时区的坑,果然偷的懒最终还是会有报应的,于是梳理下对应的时区问题,同时发现系统中之前的数据库 Mongo 中的时区问题,一起整理如下。 基础概念 几个时间概念 首先是几个常见的时间概念 GMT 时间:格林威治时间,基准时间 ...

Poetry 包管理

Python package management by poetry

背景介绍 在 Python 的包管理中,一直没有一个完善的包管理工具,很长一阵子,项目依赖都是通过 requirements.txt 定义必要的依赖,而使用 requirements.txt 不仅繁琐,而且比较不方便维护,甚至没有办法维护直接依赖和间接依赖,虽然后面有 pip-tools 去提供一些便利,但是包管理依旧不方便。 哪里有不便,哪里就有人提供解决方案。大佬 Kenneth R...

基于 FastAPI 与 MongoDB 的数据流梳理

Data flow base on FastApi and MongoDB

背景介绍 自从 Python 3.5 以来,Python 在类型注解上的功能越来越强大,在 Python 3.7 又提供了的 dataclass, 可以比较便利地提供结构化的数据类。 与此同时,各种第三方的库也在基于类型注解提供了更便利好用的服务,其中 FastAPI 便是一款提供类型注解的 Web 服务框架,在保证了极高的性能的同时,提供了便利的数据管理。可以大大提升 Python 开...

虚拟 DOM 与 diff 算法

Virtual DOM and diff algorithm

基础背景 目前在使用前端框架的程序员们,或多或少都会知道框架背后的虚拟 DOM与 diff 算法,但是并不一定深入了解过为什么虚拟 DOM 要存在,以及不同前端框架如何进行更高效地渲染,这篇文章尝试去梳理一下这个完整流程 虚拟 DOM 介绍 有一些前端知识的都知道,对于 Web 页面而言,客户端最终可以展示的内容都是 html 页面,因此不管技术如何发展,最终都需要转化为 html 页...