漫谈容器与容器云

基础设施与软件架构从经典三层架构到容器云 从单体架构到微服务架构 服务管理服务编排与部署随着业务的增加,从单体架构到微服务架构似乎是一种必然的趋势。容器带来了新的服务发布方式——以容器镜像作为服务从开发到运维的交付产物——但是并不能解决服务拆分带来的庞大服务数量问题。此外,对于一个大型系统来说,无论是服务之间存在的依赖关系,还是服务与外部系统的依赖关系都是非...

阅读全文

Linux环境编程(4)-进程生命周期

进程的层次关系pid是进程ID,pgid是进程组ID,sid是会话ID。默认情况下,新创建的进程会继承父进程的进程组ID和会话ID。 比喻:会话是公司,进程组是部门,进程是员工。 进程组方便管理一组进程,比如发送信号可以发给一个进程组。 对于shell会话来说,登录时的进程为会话首进程。之后启动的进程分为前台进程组和后台进程组的概念。只有一个前台进程组...

阅读全文

Linux环境编程(0)-从应用到内核

编译的过程: 预处理:替换宏 编译:将源代码编译成汇编 汇编:将汇编代码编译成二进制 链接:地址,so 编译成的ELF文件内容: header信息 magic数 代码段 数据段 bss零值数据段 运行时:strace可以追踪程序的系统调用 加载ld.so 加载glibc.so mmap将二进制映射到内存 执行main函数 gl...

阅读全文

Java多线程编程实战指南(8)-线程管理

线程管理ThreadGroup是个隐含的概念,通常情况下不用管。 uncaughtExceptionHandler可以用来处理线程的异常退出状态,比如实现线程退出重启。uncaughtExceptionHandler实例选择的优先级:本线程设置的handler > 线程池handler > 默认的handler。 ThreadFactory用工厂...

阅读全文

Airflow源码分析(4)-scheduler分析

scheduler的主循环scheduler的逻辑: 遍历DAG路径下的所有dag文件 启动一定数量的进程(进程池),并且给每个进程指派一个dag文件。每个进程解析分配给它的dag文件,并根据解析结果在DB中创建DagRun和TaskInstance。对于满足执行条件的TaskInstance,将状态修改为SCHEDULED 在scheduler的主循环中...

阅读全文

LeetCode题解-Best Time to Buy and Sell Stock

对LeetCode上遇到的股票问题做一个总结,涉及到6道题:121, 122, 123, 188, 309, 714 题目地址:Best Time to Buy and Sell Stock 这些题的总体要求都是根据每天的股价涨跌来决定买卖股票,使得总体的利润最大,但是对于不同题有不同的限定条件,难度也是越来越大,其中4道题都是DP求解。 121(Easy)...

阅读全文

k8s核心组件分析-scheduler

k8s中的scheduler负责资源调度,具体来说,是将某个pod绑定到某个node上。scheduler的输入是待调度的pod和可调度的node,输出是pod和node的bind对象。 k8s采集数据要进行调度首先得知道哪些需要调度,哪些node可以调度,调度策略需要很多信息来进行决策。k8s中并不会有消息队列来进行组件之间的通信,scheduler是直...

阅读全文

Docker架构分析

Docker架构概览网上很多架构图中都有Docker Engine和Job,但是1.7版本其实不再用这种方式。 Docker使用C/S架构。用户通过Docker client与Docker daemon通信,Docker daemon中有个API Server处理具体请求。而具体到后端的实际操作,Docker则分了很多模块,其中对容器运行时、vol...

阅读全文

Airflow源码分析(3)-jinja渲染部分

简介Jinja渲染在Airflow用于参数跟字段的渲染,这里做一个简单的实现分析。 分析模板渲染的流程是在TaskInstance()._run_raw_task()中进行的。 _run_raw_task_run_raw_task大致的逻辑如下: 1234567891011121314151617181920def _run_raw_task(...):.....

阅读全文

Airflow源码分析(2)-xcom部分

xcom简介XComs(cross-communication)使得任务之间可以交换信息,允许更细粒度的控制和状态共享。XComs包含key, value, timestamp, 同时也包含创建xcom的任务实例的task_id, dag_id, execution_date等。 Task可以在运行时通过xcom_push(key, value)发送任意可序...

阅读全文