2024年了,我已经36岁了,我还是一个程序员,我还是在微软工作,似乎还是没有什么变化。但是仔细想来,周边发生了很多的变化。

去年举家从南京搬往苏州,女儿也上了小学。每天上班下班带娃写作业,周末带娃去骑自行车。

每年得学习一些新的知识来刷新自己,去年有几天学习了深度学习相关的知识,觉得似乎没有想象的那么难。今年打算继续在NLP和LLM方向深入学习。

之前一直在做微服务相关的工作,今年打算在微服务的基础上,深入学习一下Service Mesh相关的知识。把自己在istio上的一些实践总结一下。

新的一年,也要继续骑车,保持健康的身体。

新的一年,也要继续学习,保持年轻的心态。最近发现自己心态老了,不再愿意去深入了解一些新的技术,总是觉得自己已经够用了,不需要再去学习新的东西了。这是不对的。

新的一年,也要继续写作,保持自己的思考。最近发现自己的写作能力下降了,提笔时经常不知道自己在想什么。

2023-11-01-huzhou.jpeg

Deploying Applications the DevOps Way

[TOC]

1. Using the Helm Package Manager

  • Helm is used to streamline installing and managing Kubernetes applications.
  • Helm consists of the helm tool, which needs to be installed, and a chart.
  • A chart is a Helm package, which contains the following:
    • A description of the package
    • One or more templates containing Kubernetes manifest files
  • Charts can be stored locally, or accessed from remote Helm repositories.

Demo: Installing the Helm Binary

  • Fetch the binary from https://github.com/helm/helm/releases ; check for the latest release!
  • tar xvf helm-xxx.tar.gz
  • sudo mv linux-amd64/helm /usr/local/bin/
  • helm version

Getting Access to Helm Charts

The main site for finding Helm charts, is through https://artifacthub.io

This is a major way for finding repository names. We can search for specific software here, and run the commands to install it; for instance, to run the kubernetes dashboard:

1
2
3
# helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard
Read more »

[TOC]


1. 什么是分布式系统

计算机科学家Andrew S. Tenenbaum对分布式定义为:

A collection of independent computers that appear to its users as one computer

他认为,分布式系统必须要有的三个特征是:

  1. The computers operate concurrently.
  2. The computers fail independently.
  3. The computers don’t share a global clock.

本篇文章包含以下分布式相关的内容:

  1. Storage(存储): Relational/Mongo, Cassandra, HDFS
  2. Computation(计算): Hadoop, Spark, Storm
  3. Synchroniztion(同步): NTP, vector clock(向量时钟)
  4. Consensus(共识): Paxos, Zookeeper
  5. Messaging(消息): Kafka

文中会以一个咖啡店业务的发展过程作为例子来进行分布式概念的引入,该咖啡店提供在线业务,从小到大的发展中遇到了各个技术问题,我们一点点进行说明讲解。

Read more »

[TOC]

1. 编写消息并编译为go代码

1.1 安装

  1. 安装go vscode
  2. vscode安装protobuf插件
  3. 安装protoc,编写makefile生成go代码

1.2 protocol message规则

  1. message使用驼峰

  2. 字段使用lower_snake_case

  3. 内置的类型

    1. string, bool, bytes

    2. float, double

    3. int32, int64, uint32, uint64, sint32, sint64

  4. 也可以使用其他message作为字段类型

  5. tag很重要:

    1. tag整数,从1到2^29-1
    2. 19000-19999保留
    3. 第1-15个tag使用1个byte
    4. 16-2047个tag占用2个byte
    5. tag不需要有顺序或者递增tag必须唯一定义消息

1.3 消息定义

定义文件proto/processor_message.proto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
syntax = "proto3";
option go_package="io.liux/pcbook/pb";

package pb;
message CPU {
// comment 1
string brand = 1;
/*
* comment 2
*/
string name = 2;
uint32 number_cores = 3;
uint32 number_threads = 4;
double min_ghz = 5;
double max_ghz = 6;
}

1.4 编译为Go

Read more »

[TOC]

1. Opertimizing Data Access

MySQL提供了Sakila示例数据库供学习

  1. 只返回应用需要的:恰当地使用WHERE语句
  2. 只返回应用需要的:避免使用SELECT *,尽量指定列名
  3. 避免对同样的数据多次查询:使用应用缓存
  4. order the data only if you are not ordering them in application: 使用ORDER BY,避免在应用中排序
  5. SELECT DISTINCT name, last_name去重

2. MySQL Query Optimization

查询语句执行时经历的组件:

mysql-1

[TOC]

1. MapReduce概述

源自于google的MapReduce论文.

Hadoop MapReduce是Google MapReduce的开源版本。

MapReduce优点:

  1. 海量数据离线处理
  2. 易开发
  3. 易运行

MapReduce缺点:

  1. 实时流式计算

官网

Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.

Read more »

[TOC]

1. YARN产生背景

1.1 Hadoop 1.x中MapReduce存在的问题

Hadoop 1.x时,还没有YARN。MapReduce架构采用的是Master/Slave架构,一个JobTracker带多个TaskTracker。提交作业时客户端直接与MapReduce的JobTracker进行通信。

  • JobTracker主要的功能是资源的管理与作业的调度。
  • TaskTracker
    • 定期(通过心跳)向JobTracker汇报本节点的健康状况、资源使用情况、作业执行情况。
    • 接收来自JobTracker的命令:启动任务、杀死任务

map-reduce

存在采用的Master的问题:

  1. 单点故障:整个集群只有1个JobTracker。
  2. JobTracker要接受各个TaskTracker与client的通信请求,节点压力大。
  3. JobTracker承担了多种职责,且只能接受MapReduce的作业,不易扩展。

1.2 提高资源利用率和降低运维成本的诉求

resource usage

Read more »

[TOC]

1. HDFS 概述及设计目标

Hadoop设计目标:

  • 非常巨大的分布式文件系统
  • 运行在普通廉价的硬件上
  • 易扩展、为用户提供性能不错的文件存储服务

具体见:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Assumptions_and_Goals

2. HDFS架构

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

img

HDFS采用1个Master(NameNode/NN) 带N个Slaves(DataNode/DN)架构。同时YARN、HBase也是一个Master带多个Slave。

1个文件会被拆分成多个Block。(BlockSize默认是128M)。比如一个130M的文件会被分成128M和2M的Block。

Read more »

[TOC]

1. Hadoop概述

官网:https://hadoop.apache.org/

Hadoop包含以下模块:

  1. Hadoop Common: 支撑其他模块的通用工具
  2. Hadoop Distributed File System(HDFS): 分布式文件系统,提供高吞吐数据读取
  3. Hadoop YARN: 作业调度与资源管理框架
  4. Hadoop MapReduce: 基于YARN的大数据并行处理。

开源的分布式存储与分布式计算平台

1.1 Hadoop能做什么

  • 搜索引擎
  • 日志分析
  • 商业智能
  • 数据挖掘

2. Hadoop核心组件

2.1 分布式文件系统HDFS

Read more »
0%