Carlmartin' Blog

In me the tiger sniffs the rose.

文章转载自此

定义

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用

平时我们遇到的使用微信授权登录, 就是OAuth的一个应用. 在国外经常使用github或者google/facebook账号用于登录各种类似的网站.

令牌和密码

OAuth的一个特点是使用Token.

令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。

  1. 令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。

  2. 令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。

  3. 令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。

阅读全文 »

SQLFLow介绍

SQLFlow是阿里巴巴蚂蚁金服开源的一个AI On SQL的项目, 目标是SQL 引擎和 AI 引擎连接起来,让用户仅需几行 SQL 代码就能描述整个应用或者产品背后的数据流和 AI 构造

SQLFlow 最早的初衷,就是希望解决分析师既要操作数据又要使用 AI、往往需要在两个甚至更多的系统之间切换、工作效率低的窘境。

目前业界已有的AI ON SQL的方案:

  • Microsoft SQL Server:Microsoft SQL Server 支持机器学习服务,可以将 R 或 Python 编写的机器学习程序作为外部脚本运行.缺点: 需要编写R或者Python程序代码
  • Teradata SQL for DL:Teradata 也提供了 RESTful 服务,可以通过扩展的 SQL SELECT 语法调用. 缺点: 语法耦合了它的Rest服务
  • Google BigQuery:Google BigQuery 通过引入 CREATE MODEL 语句让用 SQL 实现机器学习成为可能. 缺点: 支持的模型有点少, 深度学习还不支持.

针对以上三个方案的缺点, SQLFlow的定义了自己的三个设计目标:

  • 这一解决方案应与许多 SQL 引擎都兼容,而不是只能兼容特定版本或类型的 SQL 引擎。
  • 它应该支持复杂的机器学习模型,包括用于深度学习的 TensorFlow 和用于树模型的 XGBoost。
  • 能够灵活地配置和运行前沿机器学习算法,包括指定特征交叉,无需在 SQL 语句中嵌入 Python 或 R 代码,以及完全集成超参数估计等。

目前阶段来说, SQLFlow已经支持MySQL/MaxCompute/Hive, 机器学习框架已经支持TF和XGBoost.

资源:

阅读全文 »

缘起

最近做产品的时候, 由算法团队写完AI算法模型, 由我们产品团队完成对工程化的改造, 然后再把API上线.

但是这个时候遇到沟通成本很高, AI算法大多是探索式的, 输入是比较少边的, 但是输出可能会多次变化, 这样对产品化人员又很麻烦, 本来就是很简单的代码, 就是需要不停的修改, 用来适配整体的API.

这里有个前提: 尽量让算法的人员减少对产品的代码的感知, 毕竟他们不是专业的

因此, 我查了一下开源社区对这个问题的处理方式, 最后还真查到了TF Serving这个工程, 决定调研一下是否能够解决我的问题.

TF ServingTensorFlow Extended工程的一个子工程, TFX是一个端到端的AI平台, 简单理解就是:

他的关注点在于AI机器学习的工程化部分

TFX总共有4个模块:

  1. TensorFlow Data Validation: TensorFlow Data Validation (TFDV) 能够帮助开发者大规模地理解、验证和监控机器学习数据。Google 每天都使用 TFDV 分析和验证 PB 级的数据,并且在帮助 TFX 用户维护机器学习流水线正常运行方面,TFDV 一贯表现良好
  2. TensorFlow Transform: 在将机器学习应用于现实世界的数据集时,需要投入很多精力才能将数据预处理为合适的格式,其中包括在各种格式之间进行转换、对文本进行标记化和词干化、创建词汇表、执行归一化等各种数字操作。您可以使用 tf.Transform 完成所有这些操作
  3. TensorFlow Model Analysis: TensorFlow Model Analysis (TFMA) 让开发者能够计算和可视化模型的评估指标。在部署任何机器学习 (ML) 模型之前,机器学习开发者需要评估模型的性能,以确保其达到特定的质量阈值,并且能够针对所有相关数据切片展示出与预期相符的行为。例如,模型针对整个评估数据集的 AUC 可能是可接受的,但针对特定切片却表现不佳。TFMA 为开发者提供了深入了解其模型性能的工具
  4. TensorFlow Serving: 机器学习 (ML) 应用系统必须支持模型版本控制(用于实现包含回滚选项的模型更新)和多个模型(用于实现通过 A/B 测试进行的实验),同时还要确保并发模型能够在硬件加速器(GPU 和 TPU)上以较低的延迟实现较高的吞吐量。TensorFlow Serving 每秒能为 Google 处理数千万次推断
阅读全文 »

测试环境为: ubuntu == 18.04

官方文档: https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)

ubuntu18.04版本需要安装的是V2.0版本, 网上文章大多是V1.0的, 在这个版本的ubutnu无法安装

安装命令:

1
2
3
4
5
6
7
8
9
10
11
12
# 添加源
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# 安装
sudo apt-get install nvidia-docker2
# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker

启动镜像

1
nvidia-docker run -p 8888:8888   --dns 8.8.8.8 --dns 8.8.4.4 gcr.io/kubeflow-images-public/tensorflow-1.12.0-notebook-gpu:v0.5.0

—dns 8.8.8.8 —dns 8.8.4.4指定公网DNS, 不然容器里面无法访问网络

阅读全文 »

测试环境为: ubuntu == 18.04, docker == 19.03.1

有些docker容器是在Google Cloud上的是, 因此需要下载的时候, 需要配置代理才能访问

1
2
3
4
## 创建docker启动文件夹
sudo mkdir -p /etc/systemd/system/docker.service.d
## 创建proxy配置文件
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

写入以下配置项

1
2
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118/" "HTTPS_PROXY=http://127.0.0.1:8118/" "NO_PROXY=localhost,127.0.0.1,registry.docker-cn.com,hub-mirror.c.163.com"

http://127.0.0.1:8118是shadowsocks转出来的http端口

不需要走代理的镜像仓库, 在NO_PROXY里配置

配置生效

1
2
3
4
5
6
# 刷新配置项
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker
# 查看docker配置项
sudo systemctl show --property=Environment docker

测试是否生效

阅读全文 »

最近从同事手中借了一个ShadowSocks的账号, 用来翻墙使用, Windows和Mac使用的时候都比较简单, 因为有图形化的页面, 但是在Ubuntu上遇到不大不小的问题, 特意记录一下.

安装客户端

1
2
3
4
# 如果没有安装过pip, 请先安装
sudo apt install python-pip
sudo pip install shadowsocks
sudo vim ~/shadowsocks.json

填入你服务端的配置项:

1
2
3
4
5
6
7
8
{
"server":"远端ip",
"server_port":2443,
"local_port":1080,
"password":"密码",
"timeout":30,
"method":"aes-256-cfb"
}

启动客户端

1
sslocal -c ~/shadowsocks.json

这个时候, 如果你的shadowsocks版本是2.8.2的话, 就会出现以下的异常信息:

1
undefined symbol EVP_CIPHER_CTX_cleanup
阅读全文 »

污点和容忍

如果你不想在某个节点上, 执行任何Pod, 你可以通过Kubernetes的Taints特性实现

每个污点的组成如下:

1
key=value:effect

每个污点有一个key和value作为污点的标签,其中value可以为空,effect描述污点的作用。当前taint effect支持如下三个选项:

  • NoSchedule:表示k8s将不会将Pod调度到具有该污点的Node上
  • PreferNoSchedule:表示k8s将尽量避免将Pod调度到具有该污点的Node上
  • NoExecute:表示k8s将不会将Pod调度到具有该污点的Node上,同时会将Node上已经存在的Pod驱逐出去

污点的设置和去除

1
2
3
4
5
# 设置污点
kubectl taint nodes node1 key1=value1:NoSchedule

# 去除污点
kubectl taint nodes node1 key1:NoSchedule-

容忍

阅读全文 »

Helm是Kubernetes生态系统中的一个软件包管理工具.

对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。

除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。

Helm概念

  • Helm: Kubernetes的应用打包工具,也是命令行工具的名称。
  • Tiller: Helm的服务端,部署在Kubernetes集群中,用于处理Helm的相关命令。
  • Chart: Helm的打包格式,内部包含了一组相关的kubernetes资源。
  • Repoistory: Helm的软件仓库,repository本质上是一个web服务器,该服务器保存了chart软件包以供下载,并有提供一个该repository的chart包的清单文件以供查询。在使用时,Helm可以对接多个不同的Repository。
  • Release: 使用Helm install命令在Kubernetes集群中安装的Chart称为Release。

下图展示这个概念之间的联系:

华为云上安装

Helm安装

阅读全文 »

最近使用公司的开发机器(ubuntu系统), 执行git clone一直会出现如下错误:

1
error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.

据说产生这个错误的原因, ubuntu上使用的https认证组件有问题, 使用如下步骤可以解决该问题.

大部分的内容参考自这篇博客,但是文章的步骤在公司的机器还是有一些问题,我会注明.

安装必要依赖

1
2
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get install libcurl4-openssl-dev

下载源码并重新编译安装

阅读全文 »

之前想做过一个多版本发布的系统, 当时了解了不少微服务部署的概念, 其中就包括蓝绿发布, 灰度发布以及AB测试.

但是当时对这些概念理会的不是很深, 大致认为他们都是差不多的东西. 这次研究ServiceMesh的时候, 这些概念又出现了, 所以现在写个文章把这些概念理清楚.

内容不少节选自这篇文章这篇文章

蓝绿发布

蓝绿部署中,一共有两套系统:一套是正在提供服务系统,标记为“绿色”;另一套是准备发布的系统,标记为“蓝色”。两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同。

蓝绿发布最大的特点就是:

  1. 两套运行环境
  2. 流量一把切

特别要注意的, 两套运行环境只要是指无状态服务那个一部分, 对于原数据库或者其他有状态的实例, 始终使用的都是同一套系统.

如果想要将这些有状态实例进行切换, 必须保证数据同步的, 这样来就必然会涉及到了CAP理论, 整个系统复杂性就高了.

阅读全文 »
0%