SpringMVC+Angular2.0:批量拷贝打包后的ang app到webapp

 

CentOS 7 安装Oracle JDK 1.8

在Oracle收购Sun之后加了一些条款协议,导致以往直接通过url下载失败。
所以在下载时需要做特殊处理,加上同意协议的cookie一起提交:

如果看到

即表示安装成功。

CentOS 7 修改epel扩展源

今天在开发环境安装RabbitMQ时,安装依赖项erlang总是报错,提示依赖包404。源是sohu的,后来改成aliyun的也依旧错误,可能是同步源有问题。在网上找到官方的源,改为官方源:

vi /etc/yum.repos.d/epel.repo
[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
enabled=1
gpgcheck=0

添加完成后,清除缓存:

yum clean all && yum update

对于默认源的修改:

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo -O CentOS-Base.repo

可以替换为163的源。

还是debian好。。。

ZooKeeper集群搭建

系统基于Debian 8。

首先安装ZooKeeper:

安装之后的环境:

zookeeper配置文件目录:/etc/zookeeper
zookeeper实际安装目录:/usr/share/zookeeper
zookeeper日志目录:/var/log/zookeeper
默认配置数据目录:/disk2/zookeeper

需要注意默认配置的数据目录是不存在的,所以如果启动,会异常并停止。

默认的配置文件zoo.cfg应该包含以下配置项:

假设要配置一个基本的zookeeper集群,3个节点(只能基数,决定投票出主机)。

第一个节点的配置文件zoo.cfg:

第二个节点的配置文件zoo2.cfg:

第三个节点的配置文件zoo3.cfg:

配置完以后,把不存在的dataDir/dataLogDir都创建了。

找到实际安装目录/usr/share/zookeeper/bin,里面有zkEnv.sh,zkServer.sh,分别复制成3份,修改对应内容,配置文件对应刚才创建的3份*.cfg配置路径。

这样启动zkServer.sh,就启动了。

这时候查看zookeeper的日志,会互相连接,3个节点连接后,会选举出主机。

 

自此zookeeper集群搭建完毕,已正常运行。

dubbox搭建参照:

http://blog.csdn.net/u011282930/article/details/51017820

UBER技术栈解析

基础设施和存储
Schemaless(MySQL)用于数据持久化存储
Cassandra满足高可用性和低延迟的需求
Hadoop来存储和分析复杂数据
Redis作缓存和队列
Twemproxy实现了一致性哈希算法,提供了缓存层的扩展性而又没有牺牲缓存命中率

日志
为了支持日志功能,我们使用了好多套Kafka集群
在数据被Kafka淘汰之前会最终归档到Hadoop和Web服务的文件存储。
并在ELK上为搜索和可视化功能创建索引(ELK是Elasticsearch,Logstash和Kibana的缩写)。

App部署
Aurora的长时间运行服务和定时任务
用Mesos的Docker容器

路由和服务发现
HAProxy和Hyperbahn解决服务必须能在我们的复杂网络中与彼此通信
Ringpop、TChannel和Hyperbahn都是要为服务网络增加自动化、智能性和提高性能。
速度和可靠性方面,我们还可以用HTTP之外的SPDY、HTTP/2和TChannel等协议和Thrift或Protobuf等接口定义语言来方便我们演进系统
Ringpop是个一致性哈希层,提供了应用层的协作和自愈功能。
Hyperbahn让服务可以简单可靠的进行相互通信,即使服务是用Mesos动态调度的。

开发与部署
很多内部操作都依赖Phabricator,从代码审查到生成文档,到流程自动化。
用OpenGrok来查找代码。
对于Uber开源的项目,我们直接用GitHub来跟进问题和做代码审查。
云服务提供商的虚拟机测试;
Jenkins用作持续集成
Packer、Vagrant、Boto和Unison组合在一起来打造在虚拟机上进行构建、管理和开发的工具。
用Clusto来做开发的清单管理
用Puppet管理系统配置
用uBlame(git-blame的改进版)来跟踪哪个团队管理着哪种特定服务
用Whober来查询名字、相片、联系方式、组织架构等
用Sphinx自动从存储服务器的信息中构建文档
用OSX开发
生产环境服务器上运行的Linux都是Debian Jessie

开发语言
用Go和Java主要是出于高性能的考虑
Java利用了开源生态系统,并与Hadoop和别的分析工具等结合得非常好
Go对并发的原生支持对许多非常重视高性能的新服务来说也非常合适
Marketplace团队用的是Node.js
用C和C++来写些工具(比如在系统级的高效和快速的代码)

测试
Hailstorm用来做集成测试,在非繁忙时间模拟峰值压力
uDestroy会故意搞坏一些东西,来测试我们对非预期故障的处理
员工都会先使用测试版的App来不断测试新功能,然后才会交到用户手中
我们有个App反馈器,用于记录发布给用户之间遇到的所有问题
每当我们为Uber App生成新版本时,这个功能都会让我们去Phabricator上加一个修复问题的任务

可靠性
用Nagios来做监控告警,绑定到一个告警系统上

创造性地使用数据
用JavaScript(ES5和ES6)和React来构建了数据产品,作为我们的核心工具。
可视化证明了react-map-gl的功能,这是一个由Uber数据可视化团队开发的MapboxGL-js的封装器

地图
地图服务主要是基于Java技术开发的
Gurafu,它通过许多精细的路由选项来提供了许多处理道路地图数据的功能,提高了效率和准确性。
Gurafu前端是µETA,它在原始ETA之上加了个业务逻辑层。Gurafu和µETA都是基于DropWizard框架开发的Web服务。
用Ringpop和Sevnup来实现功能,并在哈希环中有节点发生故障、或者有别的节点成为主键空间的主节点时做对象角色切换。
为全公司的团队构建跨功能工具的工程师们是在Uber里用Cassandra和Go用得最多的,最主要的原因就是速度。Cassandra做横向扩展非常容易,而Go语言的编译超级快。

 

uber技术栈.PDF

原文地址:没有免费用户却飞速发展,Uber技术栈全解析!