SherlockGy's Blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

Go实现最简单的在线视频播放

发表于 2020-04-28 | 分类于 程序人生 > Golang
本文字数: 621 | 阅读时长 ≈ 1 分钟

如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
"log"
"net/http"
"os"
"time"
)

func video(response http.ResponseWriter, request *http.Request) {
response.Header().Set("Content-Type", "video/mp4")
file, err := os.Open("/Users/sherlockgy/Downloads/1.mp4")
if err != nil {
log.Println("文件打开异常...")
return
}
http.ServeContent(response, request, "test", time.Now(), file)
defer file.Close()
}

func main() {
http.HandleFunc("/video", video) // 设置访问的路由
err := http.ListenAndServe(":9090", nil) // 设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
阅读全文 »

未命名

发表于 2020-04-22
本文字数: 49 | 阅读时长 ≈ 1 分钟

使用ZK实现最简单分布式锁

分布式锁也是ZK的常见应用场景。我们可以利用其临时节点来实现分布式锁。

未命名

发表于 2020-04-18 | 更新于 2020-05-08
本文字数: 1.2k | 阅读时长 ≈ 1 分钟

云原生学习笔记

[TOC]

一、技术发展历史

  • 2004~2007:Google大规模使用容器(cgroups)技术
  • 2008.01:cgroups技术合并进Linux主干,为容器化打下基础
  • 2013.03:Docker项目正式发布
  • 2014.06:Kubernetes项目发布
  • 2015.07:CNCF(云原生基金会)成立,22个创始成员,Kubernetes成为第一个CNCF项目
  • 2017.07:CNCF成立2周年,170个会员,14个基金会项目
  • 2018.07:CNCF成立3周年,195个会员,19个基金会项目,11个孵化项目

二、云原生的定义

容器技术的革命性类似于集装箱的革命性。

容器技术可以使应用以自包含的方式定义,从而更敏捷、可拓展、可复制。

云原生是一条最佳路径(最佳实践)。这条路径能:

  • 低心智负担的、
  • 敏捷的、
  • 以可拓展、可复制的方式

最大化地利用云的能力,发挥最大价值。

容器技术就是云原生技术的核心底盘。

三、云原生思想的两个理论基础

1. 不可变基础设施

目前实现:容器镜像

解释:我们的跑应用的基础设施应该是==不可变==的,是自包含、自描述且可以随时迁移的。

基础设施向云演进的过程

传统应用的基础设施:

可变,如SSH连接到服务器,手动升级或降级软件包,逐个服务器调整配置文件,新代码直接部署到现有服务器上

对云友好的应用基础设施:

不可变,如部署完成之后基础设施不会被修改。如需更新,则更改公共镜像构建新服务以替换旧服务。验证后,新服务投入使用,旧服务退役。

2. 云应用编排理论

目前实现:容器设计模式(Google提出)

四、容器与镜像

容器与普通的操作系统进程,有什么区别呢?

image-20200418213049729

由于进程是共享同一份文件系统,导致权限较高的进程会影响到权限较低的进程的文件操作,形成相互干扰;

由于进程和进程间的依赖可能存在冲突,会给运维带来压力;

由于进程间使用同样的宿主机的资源,存在资源抢占,权限低的进程可能会因为抢占不到资源而无法提供服务。

什么是容器?

容器,是一个视图隔离、资源可限制、独立文件系统的进程集合。

  • 视图隔离 - 如能看见其他进程;独立主机名等等
  • 控制资源使用率 - 如2G内存大小;CPU使用个数等等

什么是镜像?

运行容器所需要的所有文件的集合,就是容器镜像

Dockerfile - 描述镜像构建步骤

构建步骤所产生出文件系统的变化 - changeset

  • 类似disk snapshot
  • 提高分发效率,减少磁盘压力

容器的生命周期

单进程模型

  1. init进程的生命周期 = 容器的生命周期
  2. 运行期间可以执行exec执行运维操作,exec进程也归init进程管理,当init进程退出,其管理的其他进程皆退出

数据持久化

  1. 独立于容器的生命周期
  2. 数据卷 - docker volume vs bind

Golang与UTF-8

发表于 2020-04-17 | 分类于 程序人生 > Golang
本文字数: 631 | 阅读时长 ≈ 1 分钟

Golang与UTF-8

我们在浏览器抓包的时候,有时候会发现类似这样的一串字符串:

\350\241\250\346\203\205

当然我们都知道这多半是UTF-8表示的汉字。那么在Go语言当中,我们要怎么转换他们呢?

这里直接贴一下代码,以作记录。

注意:这里的数字其实是8进制表示的!

阅读全文 »

给macOS的访达(Finder)配置快捷键快速启动

发表于 2020-04-16 | 分类于 技巧分享 > Mac
本文字数: 373 | 阅读时长 ≈ 1 分钟

给macOS的访达(Finder)配置快捷键快速启动

[TOC]

第一步,配置自动操作指令

首先,打开macOS自带的这个小机器人工具:

image-20200416010727401

然后点击新建文稿:

image-20200416010812552

文稿类型选择快速操作:

image-20200416010848813

选择实用工具 -> 开启应用程序:

阅读全文 »
123…23
SherlockGy

SherlockGy

Keep thinking different...

111 日志
38 分类
62 标签
RSS
GitHub E-Mail
友情链接
  • GoLang-飞雪无情的博客
  • Java-酷壳
  • Python-静觅丨崔庆才的个人博客
  • 掘金
  • GoLang中国
  • GoLang中文社区
  • V2EX
  • Microsoft Docs
  • Go语言圣经
© 2020 SherlockGy | 191k | 2:false
由 Hexo 强力驱动 v3.7.1
|
主题 — NexT.Pisces v6.3.0