inside tae - it168.com –...

Post on 18-Feb-2018

225 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Inside TAE

TAE

SAE

BAE

GAE

• 定位:淘宝的受控第三方开放基础设施

• 最初需求来自店铺装修市场

– 个性化展示和交互

– 更复杂的后台业务逻辑

• 现在已经是一个完备的AE系统

– PHP

– JAVA

TAE

淘宝U站(优站) uz.taobao.com

uz.taobao.com

• 800+ TAE App

• 2000+ App版本

• 日均UV 130W+,PV 1200+

• 平均单用户浏览页面9.08个

• 平均访问时长7分38秒

PHP 容器篇

负载均衡(LVS/F5)

Nginx

App Container

App Container

Cache File 业务服务

Mysql

开发者后台

小二 后台

应用中心

小二

ISV

浏览者

Nginx

日志系统

弹性计算

监控系统

部署系统

Nginx资源池

应用容器池

系统概览

xiaoxiqi │app.yml └view │─a.php └templates └ a.tpl

grid xiaoxiqi

… appx

开发者后台

部署

<?php $a = $appEngine->find("xService"); echo "<br>".$a->someMethod(); ?>

grid xiaoxiqi

… appx

负载均衡设备

Nginx Nginx

xiaoxiqi │app.yml └view │─a.php └templates └ a.tpl

<?php $a = $appEngine->find("xService"); echo "<br>".$a->someMethod(); ?>

PhpProgram └─BlockStatement │─ExpressionStatement │ └─ … └─EchoStatement └─ MethodInvokeStatement grid xiaoxiqi

… appx xService

负载均衡设备

Nginx

$a = $appEngine->find("xService"); echo "<br>".$a->someMethod();

店铺装修

grid

app1 app2

grid

app2 app3

grid

app3 app1

RPC

淘 宝 基 础 服 务 Tair TFS MySql OceanBase Meta HSF

LB/LVS

Tae Nginx Tae Nginx

RPC

HSF HSF

HTTP

店铺浏览

LB/LVS LB/LVS

路由

用户域 编程规范

JVM (For TAE)

Linux Security Container(T4 for TAE)

Linux OS With Sandbox

服务接入(proxy)

Smarty模板

TAE Servlet层

前端组件

安全

JBoss/Jetty(With Java Security)

DB服务

文件服务

日志服务

缓存服务

业务服务

Tae Common Engine层

PDO组件

应用逻辑

系统域

动态配置

PHP容器结构

PHP Groovy Velocity 缓存 加载 编译 执行

权限 Context 分派 缓存 过滤 流控 绑定 Caja

部署 监控

服务API

对Quercus的改进

没有大规模商用的实验室产品

能够工业化,大规模使用的产品 U站 -- 9个月 -- 800+ ISV,应用版本

PHP安全

• 没有PHP原生环境

– 第三方代码:PHP;容器代码:java

– 弱类型语言操作强类型语言

– 代码执行引擎和代码本身处于不同的层级

• 前端安全

– Caja沙箱 + HTML/CSS 白名单过滤

– 上线前黑白盒扫描,上线后定时黑盒扫描

• 资源安全

– 死循环;耗时操作

– 大内存

JS安全解决方案

物理机

Linux Container

IpTables

JVM 4 TAE Grid 进程

Java SandBox

JBOSS/Jetty

Quercus Engine

PHP 白名单

app1 app2 appx …

物理机

Linux Container

IpTables

JVM 4 TAE Grid 进程

Java SandBox

JBOSS/Jetty

Quercus Engine

PHP 白名单

app1 app2 request response

Caja SandBox TB

MLFilter

TaoBao Header

站点类型定制前端

TaoBao Footer

AppCode HtmlOut

js/css

JAVA 容器篇

需要解决什么问题?

• 安全问题!

– ISV代码、数据安全

– *淘宝买家数据安全

– *淘宝数据安全

• 提供JAVA运行容器

难点 - 安全

• 应用层安全问题 – Cookie & session 泄漏用户信息

– Html、js、css、pic 等问题

– 调用未授权的服务

– Sql 注入

– XSS CSRF

• 系统层安全问题 – 资源竞争 (死循环、线程数耗尽)

– 攻破Java沙箱

– 系统0day

后果 很严重

难点– 安全

• 设计时基本考虑 – 需要的是安全体系,每一层有具体的职责

– “Java沙箱被by pass”是网络、系统层防御措施的基本假设

• 安全体系层级 – 应用层

– JVM层

– 系统层

– 网络层

– 运行时监控

JAVA应用安全体系

单用户单进程

IPtables

监控审计

普通用户权限

T4 chroot T4 Capability Instance

selinux

Iptables 监控

危险指令调用监控

JVM

JDK定制

Java Policy File

Security Manager

应用层

CA

JA

Dru

id

TBM

L

Co

okie&

Session

资源限制

系统层

网络层

JVM

上线前TopScan黑盒扫描

上线后定期TopScan黑盒扫描

上线前STC代码扫描

单进程多应用方案

• 单进程 多app

• 问题

– 权限无法隔离

– 资源也无法隔离

App1 App2

VM

Jetty

App3 App n

单用户单进程方案

• 单进程单App

• 优点

– 资源隔离有好转

– 可以初步做到文件访问权限隔离

App1

VM

Jetty 1

App2

Jetty 2

App4

Jetty 3

App n

Jetty n

• 单用户单进程 – 文件权限的设置 用户最小权限

• 问题 – 用户管理需要root权限,root权限如果被拿到,其他app就危险了

– 文件权限的管理复杂

– 如果root权限需要开通,没有办法将instance的capability全部去除,那安全级别就会降低

– 资源隔离还不够彻底

setfacl -m g:tae_apps:x / setfacl -m g:tae_apps:x / setfacl -d -m g:tae_apps:- /etc setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/group setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/passwd setfacl --set u::rw,g::r,o::r,g:tae_apps:- /etc/shadow setfacl -b -R /root setfacl -m g:tae_apps:- /root setfacl -m g:tae_apps:x /home setfacl -d -m g:tae_apps:- /home setfacl -m g:tae_apps:- /home/admin setfacl -m g:tae_apps:- /home/hubble setfacl -m g:tae_apps:- /home/tops

单VM单用户单进程方案

• 单Instance 单进程 – 每个instance有且只有一个java进程

– lxc Instance去除所有的capability

– Instance的root帐号降级为普通帐号

• 优点 – 安全模型更简单粗暴 – 架构更简单 ,管理更方便: 不需要在instance内在搞多用户

PHY

App1

Jetty 1

lxc Instance1

App2

Jetty 2

lxc Instance2

单VM单用户单进程方案

• 问题

– 资源问题 – 会生成大量的lxc incetance

• 需要休眠方案

– IP不够用

• 需要lxc incetance无IP方案

资源问题应对方案

– 按需启动 将长时间不访问的应用进程关掉 当有访问时,启动进程,提供服务

– 两种方式

• 端口转发

• 通道

Nginx

Xinetd

Jetty

在所有定义的服务端口监听连接 守护进程

Fork

Channel channel = System.inheritedChannel();

安全体系回顾

单用户单进程

IPtables

监控审计

普通用户权限

chroot Linux Capability Instance

selinux

Iptables 监控

kernel patch监控

危险指令调用监控

JVM

JDK定制

Java Policy File

Security Manager

应用层

CA

JA

Dru

id

TBM

L

Co

okie&

Session

资源限制

系统层

网络层

JVM

上线前TopScan黑盒扫描

上线后定期TopScan黑盒扫描

上线前STC代码扫描

Service Center引入

负载均衡(LVS/F5)

Nginx

App Container

App Container

Cache File 业务服务

Mysql

开发者后台

小二 后台

应用中心

小二

ISV

浏览者

Service Center

Nginx

日志系统

弹性计算

监控系统

部署系统

Nginx资源池

应用容器池

Service Center

• Service Center带来的好处

– 所有的服务调用都通过服务中心

– 网络层设置白名单,只允许访问服务中心

• 潜在性能问题

Service Center性能

• 本地进程通讯 - Tcp Friends – when both endpoints of a TCP connection are on the same machine, the two

sockets are marked as being "friends" in the kernel. Data written to such a socket will be immediately queued for reading on the friend socket, bypassing the network stack entirely

– Google 采用了类似的技术

– 每台物理机上部署一个service center, 加速物理机上的instance与service center的通讯

– 解决总线的问题,但不限于总线

TCP friends :http://lwn.net/Articles/511254/

Put it together

物理机

App1

Jetty 1

T4 Instance1

App2

Jetty n

T4 Instance n

Xinetd

Xinet daemon

Xinet daemon

Service Center

IPC Over TCP Friends

HTTP Requests

Port: 7001 Port: 70096

用户域

编程规范

JVM (For TAE)

Linux Security Container(T4 for TAE)

Linux OS With Sandbox

服务接入(Client)

服务API

MVC

页面组件API

Net (Iptables)

安全

Componet Render Engine

组件管理

Page Meta

动态服务

数据绑定

数据校验

并发渲染

Jetty(With Java Security)

数据源

队列服务

文件服务

日志服务

缓存服务

动态配置

业务服务

Common Engine

Qu

ercu

s

Velo

city

Gro

ovyy

Servlet API

应用逻辑

系统域

动态配置

容器结构

淘宝开放的三种形态

TOP 聚石塔 TAE

服务 数据 运营 导购 行业 垂直

频道 无线 建站 SNS 活动 促销

设计师 开发者 达人 品牌商 TP/ISV

开发小二 运营小二 开发小二 运营小二 开发小二

Q & A

欢迎加入TAE团队

• 这里是第三方代码的执行引擎,运行容器 • 这里涉及从前端到内核的各种技术 • 这里在支持着数千个开发团队和创业公司 • 这里客户是你的上帝,客户代码的上帝是你 • 加入我们,请联系:

– 邮箱: linxuan@taobao.com haomin.liuhm@taobao.com – 微博:

淘宝林轩 ludvik_淘宝伯昊

– 微信: 床前明月光 ludvik

top related