• 关于

    去中心化应用怎么安装

    的搜索结果

回答

Layout Go工程项目的整体组织 首先我们看一下整个 Go 工程是怎么组织起来的。 很多同事都在用 GitLab 的,GitLab 的一个 group 里面可以创建很多 project。如果我们进行微服务化改造,以前很多巨石架构的应用可能就拆成了很多个独立的小应用。那么这么多小应用,你是要建 N 个 project 去维护,还是说按照部门或者组来组织这些项目呢?在 B 站的话,我们之前因为是 Monorepo,现在是按照部门去组织管理代码,就是说在单个 GitLab 的 project 里面是有多个 app 的,每一个 app 就表示一个独立的微服务,它可以独立去交付部署。所以说我们看到下面这张图里面,app 的目录里面是有好多个子目录的,比方说我们的评论服务,会员服务。跟 app 同级的目录有一个叫 pkg,可以存放业务有关的公共库。这是我们的一个组织方式。当然,还有一种方式,你可以按照 GitLab 的 project 去组织,但我觉得这样的话可能相对要创建的 project 会非常多。 如果你按部门组织的话,部门里面有很多 app,app 目录怎么去组织?我们实际上会给每一个 app 取一个全局唯一名称,可以理解为有点像 DNS 那个名称。我们对业务的命名也是一样的,我们基本上是三段式的命名,比如账号业务,它是一个账号业务、服务、子服务的三段命名。三段命名以后,在这个 app 目录里面,你也可以按照这三层来组织。比如我们刚刚说的账号目录,我可能就是 account 目录,然后 VIP,在 VIP 目录下可能会放各种各样的不同角色的微服务,比方说可能有一些是做 job,做定时任务或者流式处理的一些任务,有可能是做对外暴露的 API 的一些服务,这个就是我们关于整个大的 app 的组织的一种形式。 微服务中的 app 服务分类 微服务中单个 app 的服务里又分为几类不同的角色。我们基本上会把 app 分为 interface(BFF)、service、job(补充:还有一个 task,偏向定时执行,job 偏向流式) 和 admin。 Interface 是对外的业务网关服务,因为我们最终是面向终端用户的 API,面向 app,面向 PC 场景的,我们把这个叫成业务网关。因为我们不是统一的网关,我们可能是按照大的业务线去独立分拆的一些子网关,这个的话可以作为一个对外暴露的 HTTP 接口的一个目录去组织它的代码,当然也可能是 gRPC 的(参考 B 站对外的 gRPC Moss 分享)。 Service 这个角色主要是面向对内通信的微服务,它不直接对外。也就是说,业务网关的请求会转发或者是会 call 我们的内部的 service,它们之间的通讯可能是使用自己的 RPC,在 b 站我们主要是使用 gRPC。使用 gRPC 通讯以后,service 它因为不直接对外,service 之间可能也可以相互去 call。 Admin 区别于 service,很多应用除了有面向用户的一些接口,实际上还有面向企业内部的一些运营侧的需求,通常数据权限更高,从安全设计角度需要代码物理层面隔离,避免意外。 第四个是 ecode。我们当时也在内部争论了很久,我们的错误码定义到底是放在哪里?我们目前的做法是,一个应用里面,假设你有多种角色,它们可能会复用一些错误码。所以说我们会把我们的 ecode 给单独抽出来,在这一个应用里面是可以复用的。注意,它只在这一个应用里面复用,它不会去跨服跨目录应用,它是针对业务场景的一个业务错误码的组织。 App 目录组织 我们除了一个应用里面多种角色的这种情况,现在展开讲一下具体到一个 service 里面,它到底是怎么组织的。我们的 app 目录下大概会有 api、cmd、configs、 internal 目录,目录里一般还会放置 README、CHANGELOG、OWNERS。 API 是放置 api 定义以及对应的生成的 client 代码,包含基于 pb 定义(我们使用 PB 作为 DSL 描述 API) 生成的 swagger.json。 而 cmd,就是放 main 函数的。Configs 目录主要是放一些服务所需的配置文件,比方说说我们可能会使用 TOML 或者是使用 YAML 文件。 Internal 的话,它里面有四个子目录,分别是 model、dao、service 和 server。Model 的定位职责就是对我们底层存储的持久化层或者存储层的数据的映射,它是具体的 Go 的一个 struct。我们再看 dao,你实际就是要操作 MySQL 或者 Redis,最终返回的就是这些 model(存储映射)。Service 组织起来比较简单,就是我们通过 dao 里面的各个方法来完成一个完整的业务逻辑。我们还看到有个 server,因为我一个微服务有可能企业内部不一定所有 RPC 都统一,那我们处于过渡阶段,所以 server 里面会有两个小目录,一个是 HTTP 目录,暴露的是 HTTP 接口,还有一个是 gRPC 目录,我们会暴露 gRPC 的协议。所以在 server 里面,两个不同的启动的 server,就是说一个服务和启动两个端口,然后去暴露不同的协议,HTTP 接 RPC,它实际上会先 call 到 service,service 再 call 到 dao,dao 实际上会使用 model 的一些数据定义 struct。但这里面有一个非常重要的就是,因为这个结构体不能够直接返回给我们的 api 做外对外暴露来使用,为什么?因为可能从数据库里面取的敏感字段,当我们实际要返回到 api 的时候,可能要隐藏掉一些字段,在 Java 里面,会抽象的一个叫 DTO 的对象,它只是用来传输用的,同理,在我们 Go 里面,实际也会把这些 model 的一些结构体映射成 api 里面的结构体(基于 PB Message 生成代码后的 struct)。 Rob Pike 当时说过的一句话,a little copying is better than a little dependency,我们就遵循了这个理念。在我们这个目录结构里面,有 internal 目录,我们知道 Go 的目录只允许这个目录里面的人去 import 到它,跨目录的人实际是不能直接引用到它的。所以说,我们看到 service 有一个 model,那我的 job 代码,我做一些定时任务的代码或者是我的网关代码有可能会映射同一个 model,那是不是要把这个 model 放到上一级目录让大家共享?对于这个问题,其实我们当时内部也争论过很久。我们认为,每一个微服务应该只对自己的 model 负责,所以我们宁愿去做一小部分的代码 copy,也不会去为了几个服务之间要共享这一点点代码,去把这个 model 提到和 app 目录级别去共用,因为你一改全错,当然了,你如果是拷贝的话,就是每个地方都要去改,那我们觉得,依赖的问题可能会比拷贝代码相对来说还是要更复杂的。 这个是一个标准的 PB 文件,就是我们内部的一个 demo 的 service。最上面的 package 是 PB 的包名,demo.service.v1,这个包使用的是三段式命名,全局唯一的名称。那这个名称为什么不是用 ID?我见过有些公司对内部做的 CMDB 或者做服务树去管理企业内部微服务的时候,是用了一些名称加上 ID 来搞定唯一性,但是我们知道后面那一串 ID 数字是不容易被传播或者是不容易被记住的,这也是 DNS 出来的一个意义,所以我们用绝对唯一的一个名称来表示这个包的名字,在后面带上这一个 PB 文件的版本号 V1。 我们看第二段定义,它有个 Service Demo 代码,其实就表示了我们这个服务要启动的服务的一个名称,我们看到这个服务名称里面有很多个 RPC 的方法,表示最终这一个应用或者这个 service 要对外暴露这几个 RPC 的方法。这里面有个小细节,我们看一下 SayHello 这个方法,实际它有 option 的一个选项。通过这一个 PB 文件,你既可以描述出你要暴露的是 gRPC 协议,又暴露出 HTTP 的一个接口,这个好处是你只需要一个 PB 文件描述你暴露的所有 api。我们回想一下,我们刚刚目录里面有个 api 目录,实际这里面就是放这一个 PB 文件,描述这一个工程到底返回的接口是什么。不管是 gRPC 还是 HTTP 都是这一个文件。还有一个好处是什么?实际上我们可以在 PB 文件里面加上很多的注释。用 PB 文件的好处是你不需要额外地再去写文档,因为写文档和写服务的定义,它本质上是两个步骤,特别容易不一致,接口改了,文档不同步。我们如果基于这一个 PB 文件,它生成的 service 代码或者调用代码或者是文档都是唯一的。 依赖顺序与 api 维护 就像我刚刚讲到的,model 是一个存储层的结构体的一一映射,dao 处理一些数据读写包,比方说数据库缓存,server 的话就是启动了一些 gRPC 或者 HTTP Server,所以它整个依赖顺序如下:main 函数启动 server,server 会依赖 api 定义好的 PB 文件,定义好这些方法或者是服务名之后,实际上生成代码的时候,比方说 protocbuf 生成代码的时候,它会把抽象 interface 生成好。然后我们看一下 service,它实际上是弱依赖的 api,就是说我的 server 启动以后,要注册一个具体的业务代码的逻辑,映射方法,映射名字,实际上是弱依赖的 api 生成的 interface 的代码,你就可以很方便地启动你的 server,把你具体的 service 的业务逻辑给注入到这个 server,和方法进行一一绑定。最后,dao 和 service 实际上都会依赖这个 model。 因为我们在 PB 里面定义了一些 message,这些 message 生成的 Go 的 struct 和刚刚 model 的 struct 是两个不同的对象,所以说你要去手动 copy 它,把它最终返回。但是为了快捷,你不可能每次手动去写这些代码,因为它要做 mapping,所以我们又把 K8s 里类似 DeepCopy 的两个结构体相互拷贝的工具给抠出来了,方便我们内部 model 和 api 的 message 两个代码相互拷贝的时候,可以少写一些代码,减少一些工作量。 上面讲的就是我们关于工程的一些 layout 实践。简单回溯一下,大概分为几块,第一就是 app 是怎么组织的,app 里面有多种角色的服务是怎么组织的,第三就是一个 app 里面的目录是怎么组织的,最后我重点讲了一下 api 是怎么维护的。 Unittest 测试方法论 现在回顾一下单元测试。我们先看这张图,这张图是我从《Google 软件测试之道》这本书里面抠出来的,它想表达的意思就是最小型的测试不能给我们的最终项目的质量带来最大的信心,它比较容易带来一些优秀的代码质量,良好的异常处理等等。但是对于一个面向用户场景的服务,你只有做大型测试,比方做接口测试,在 App 上验收功能的这种测试,你应用交付的信心可能会更足。这个其实要表达的就是一个“721 原则”。我们就是 70% 写小型测试,可以理解为单元测试,因为它相对来说好写,针对方法级别。20% 是做一些中型测试,可能你要连调几个项目去完成你的 api。剩下 10% 是大型测试,因为它是最终面向用户场景的,你要去使用我们的 App,或者用一些测试 App 去测试它。这个就是测试的一些简单的方法论。 单元测试原则 我们怎么去对待 Go 里面的单元测试?在《Google 软件测试之道》这本书里面,它强调的是对于一个小型测试,一个单元测试,它要有几个特质。它不能依赖外部的一些环境,比如我们公司有测试环境,有持续集成环境,有功能测试环境,你不能依赖这些环境构建自己的单元测试,因为测试环境容易被破坏,它容易有数据的变更,数据容易不一致,你之前构建的案例重跑的话可能就会失败。 我觉得单元测试主要有四点要求。第一,快速,你不能说你跑个单元测试要几分钟。第二,要环境一致,也就是说你跑测试前和跑测试后,它的环境是一致的。第三,你写的所有单元测试的方法可以以任意顺序执行,不应该有先后的依赖,如果有依赖,也是在你测试的这个方法里面,自己去 setup 和 teardown,不应该有 Test Stub 函数存在顺序依赖。第四,基于第三点,你可以做并行的单元测试,假设我写了一百个单元测试,一个个跑肯定特别慢。 doker-compose 最近一段时间,我们演进到基于 docker-compose 实现跨平台跨语言环境的容器依赖管理方案,以解决运行 unittest 场景下的容器依赖问题。 首先,你要跑单元测试,你不应该用 VPN 连到公司的环境,好比我在星巴克点杯咖啡也可以写单元测试,也可以跑成功。基于这一点,Docker 实际上是非常好的解决方式。我们也有同学说,其他语言有一些 in-process 的 mock,是不是可以启动 MySQL 的 mock ,然后在 in-process 上跑?可以,但是有一个问题,你每一个语言都要写一个这样的 mock ,而且要写非常多种,因为我们中间件越来越多,MySQL,HBase,Kafka,什么都有,你很难覆盖所有的组件 Mock。这种 mock 或者 in-process 的实现不能完整地代表线上的情况,比方说,你可能 mock 了一个 MySQL,检测到 query 或者 insert ,没问题,但是你实际要跑一个 transaction,要验证一些功能就未必能做得非常完善了。所以基于这个原因,我们当时选择了 docker-compose,可以很好地解决这个问题。 我们对开发人员的要求就是,你本地需要装 Docker,我们开发人员大部分都是用 Mac,相对来说也比较简单,Windows 也能搞定,如果是 Linux 的话就更简单了。本地安装 Docker,本质上的理解就是无侵入式的环境初始化,因为你在容器里面,你拉起一个 MySQL,你自己来初始化数据。在这个容器被销毁以后,它的环境实际上就满足了我们刚刚提的环境一致的问题,因为它相当于被重置了,也可以很方便地快速重置环境,也可以随时随地运行,你不需要依赖任何外部服务,这个外部服务指的是像 MySQL 这种外部服务。当然,如果你的单元测试依赖另外一个 RPC 的 service 的话,PB 的定义会生成一个 interface,你可以把那个 interface 代码给 mock 掉,所以这个也是能做掉的。对于小型测试来说,你不依赖任何外部环境,你也能够快速完成。 另外,docker-compose 是声明式的 API,你可以声明你要用 MySQL,Redis,这个其实就是一个配置文件,非常简单。这个就是我们在单元测试上的一些实践。 我们现在看一下,service 目录里面多了一个 test 目录,我们会在这个里面放 docker-compose 的 YAML 文件来表示这次单元化测试需要初始化哪些资源,你要构建自己的一些测试的数据集。因为是这样的,你是写 dao 层的单元测试的话,可能就需要 database.sql 做一些数据的初始化,如果你是做 service 的单元测试的话,实际你可以把整个 dao 给 mock 掉,我觉得反而还相对简单,所以我们主要针对场景就是在 dao 里面偏持久层的,利用 docker-compose 来解决。 容器的拉起,容器的销毁,这些工作到底谁来做?是开发同学自己去拉起和销毁,还是说你能够把它做成一个 Library,让我们的同学写单元测试的时候比较方便?我倾向的是后者。所以在我们最终写单元测试的时候,你可以很方便地 setup 一个依赖文件,去 setup 你的容器的一些信息,或者把它销毁掉。所以说,你把环境准备好以后,最终可以跑测试代码也非常方便。当然我们也提供了一些命令函,就是 binary 的一些工具,它可以针对各个语言方便地拉起容器和销毁容器,然后再去执行代码,所以我们也提供了一些快捷的方式。 刚刚我也提到了,就是我们对于 service 也好,API 也好,因为依赖下层的 dao 或者依赖下层的 service,你都很方便 mock 掉,这个写单元测试相对简单,这个我不展开讲,你可以使用 GoMock 或者 GoMonkey 实现这个功能。 Toolchain 我们利用多个 docker-compose 来解决 dao 层的单元测试,那对于我刚刚提到的项目的一些规范,单元测试的一些模板,甚至是我写了一些 dao 的一些占位符,或者写了一些 service 代码的一些占位符,你有没有考虑过这种约束有没有人会去遵循?所以我这里要强调一点,工具一定要大于约束和文档,你写了约束,写了文档,那么你最终要通过工具把它落实。所以在我们内部会有一个类似 go tool 的脚手架,叫 Kratos Tool,把我们刚刚说的约定规范都通过这个工具一键初始化。 对于我们内部的工具集,我们大概会分为几块。第一块就是 API 的,就是你写一个 PB 文件,你可以基于这个 PB 文件生成 gRPC,HTTP 的框架代码,你也可以基于这个 PB 文件生成 swagger 的一些 JSON 文件或者是 Markdown 文件。当然了,我们还会生成一些 API,用于 debug 的 client 方便去调试,因为我们知道,gRPC 调试起来相对麻烦一些,你要去写代码。 还有一些工具是针对 project 的,一键生成整个应用的 layout,非常方便。我们还提了 model,就是方便 model 和 DTO,DTO 就是 API 里面定义的 message 的 struct 做 DeepCopy,这个也是一个工具。 对于 cache 的话,我们操作 memcache,操作 Redis 经常会要做什么逻辑?假如我们有一个 cache aside 场景,你读了一个 cache,cache miss 要回原 DB,你要把这个缓存回塞回去,甚至你可能这个回塞缓存想异步化,甚至是你要去读这个 DB 的时候要做归并回源(singleflight),我们把这些东西做成一些工具,让它整个回源到 DB 的逻辑更加简单,就是把这些场景描述出来,然后你通过工具可以一键生成这些代码,所以也是会比较方便。 我们再看最后一个,就是 test 的一些工具。我们会基于项目里面,比方说 dao 或者是 service 定义的 interface 去帮你写好 mock 的代码,我直接在里面填,只要填代码逻辑就行了,所以也会加速我们的生产。 上图是 Kratos 的一个 demo,基本就是支持了一些 command。这里就是一个 kratos new kratos-demo 的一个工程,-d YourPath 把它导到某一个路径去,--proto 顺便把 API 里面的 proto 代码也生成了,所以非常简单,一行就可以很快速启动一个 HTTP 或者 gRPC 服务。 我们知道,一个微服务的框架实际非常重,有很多初始化的方式等等,非常麻烦。所以说,你通过脚手架的方式就会非常方便,工具大于约定和文档这个这个理念就是这么来的。 Configuration 讲完工具以后,最后讲一下配置文件。我为什么单独提一下配置文件?实际它也是工程化的一部分。我们一个线上的业务服务包含三大块,第一,应用程序,第二,配置文件,第三,数据集。配置文件最容易导致线上出 bug,因为你改一行配置,整个行为可能跟 App 想要的行为完全不一样。而且我们的代码的开发交付需要经过哪些流程?需要 commit 代码,需要 review,需要单元测试,需要 CD,需要交付到线上,需要灰度,它的整个流程是非常长的。在一步步的环境里面,你的 bug 需要前置解决,越前置解决,成本越低。因为你的代码的开发流程是这么一个 pipeline,所以 bug 最终流到线上的概率很低,但是配置文件没有经过这么复杂的流程,可能大家发现线上有个问题,决定要改个线上配置,就去配置中心或者配置文件改,然后 push 上线,接着就问题了,这个其实很常见。 从 SRE 的角度来说,导致线上故障的主因就是来自配置变更,所以 SRE 很大的工作是控制变更管理,如果能把变更管理做好,实际上很多问题都不会出现。配置既然在整个应用里面这么重要,那在我们整个框架或者在 Go 的工程化实践里面,我们应该对配置文件做一些什么事情? 我觉得是几个。第一,我们的目标是什么?配置文件不应该太复杂,我见过很多框架,或者是业务的一些框架,它实际功能非常强大,但是它的配置文件超级多。我就发现有个习惯,只要有一个同事写错了这个配置,当我新起一个项目的时候,一定会有人把这个错误的配置拷贝到另外一个系统里面去。然后当发现这个应用出问题的时候,我们一般都会内部说一下,你看看其他同事有没有也配错的,实际这个配错概率非常高。因为你的配置选项越多,复杂性越高,它越容易出错。所以第一个要素就是说,尽量避免复杂的配置文件。配得越多,越容易出错。 第二,实际我们的配置方式也非常多,有些用 JSON,有些用 YAML,有些用 Properties,有些用 INI。那能不能收敛成通用的一种方式呢?无论它是用 Python 的脚本也好,或者是用 JSON 也好,你只要有一种唯一的约定,不需要太多样的配置方式,对我们的运维,对我们的 SRE 同时来说,他跨项目的变更成本会变低。 第三,一定要往简单化去努力。这句话其实包含了几个方面的含义。首先,我们很多配置它到底是必须的还是可选的,如果是可选,配置文件是不是就可以把它踢掉,甚至不要出现?我曾经有一次看到我们 Java 同事的配置 retry 有一个重试默认是零,内部重试是 80 次,直接把 Redis cluster 打故障了,为什么?其实这种事故很低级,所以简单化努力的另外一层含义是指,我们在框架层面,尤其是提供 SDK 或者是提供 framework 的这些同事尽量要做一些防御编程,让这种错配漏配也处于一个可控的范围,比方重试 80 次,你觉得哪个 SDK 会这么做?所以这个是我们要考虑的。但是还有一点要强调的是,我们对于业务开发的同事,我们的配置应该足够的简单,这个简单还包含,如果你的日志基本上都是写在这个目录,你就不要提供这个配置给他,反而不容易出错。但是对于我们内部的一些 infrastructure,它可能需要非常复杂的配置来优化,根据我的场景去做优化,所以它是两种场景,一种是业务场景,足够简单,一种是我要针对我的通用的 infrastructure 去做场景的优化,需要很复杂的配置,所以它是两种场景,所以我们要想清楚你的业务到底是哪一种形态。 还有一个问题就是我们配置文件一定要做好权限的变更和跟踪,因为我们知道上线出问题的时候,我们的第一想法不是查 bug,是先止损,止损先找最近有没有变更。如果发现有变更,一般是先回滚,回滚的时候,我们通常只回滚了应用程序,而忘记回滚了配置。每个公司可能内部的配置中心,或者是配置场景,或者跟我们的二进制的交付上线都不一样,那么这里的理念就是你的应用程序和配置文件一定是同一个版本,或者是某种意义上让他们产生一个版本的映射,比方说你的应用程序 1.0,你的配置文件 2.0,它们之间存在一个强绑定关系,我们在回滚的时候应该是一起回滚的。我们曾经也因为类似的一些不兼容的配置的变更,二进制程序上线,但配置文件忘记回滚,出现过事故,所以这个是要强调的。 另外,配置的变更也要经过 review,如果没问题,应该也是按照 App 发布一样,先灰度,再放量,再全量等等类似的一种方式去推,演进式的这种发布,我们也叫滚动发布,我觉得配置文件也是一样的思路。 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答 原文链接

有只黑白猫 2020-01-09 17:29:54 0 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 38419 浏览量 回答数 12

问题

【精品问答】Java必备核心知识1000+(附源码)

问问小秘 2019-12-01 22:00:28 870 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

游戏云间之三:游戏运维

起航 2019-12-01 21:43:27 23458 浏览量 回答数 17

回答

二、节点常见问题: http://help.aliyun.com/guide?spm=0.0.0.57.g0RHts&helpId=1496 1、什么线路;   我们的服务器是BGP多线(中国电信、联通、移动、教育网等)接入,确保全国用户访问畅通。 2、节点地理位置;   我们有华东杭州节点和华东青岛节点,没有国外节点 3、能否指定节点位置;   可以根据您的需求选择华东杭州节点或者华东青岛节点 4、试用后节点可以选择么?    阿里云隆重推出华东青岛节点和华东杭州节点。目前所有申请试用的服务器默认华东青岛节点,因服务器不可更换节点,若您试用下来觉得OK可以直接对该台服务器进行续费;如需更换节点,请重新新购。 更多区域使用帮助详见: http://bbs.aliyun.com/read.php?spm=0.0.0.49.GTSotb&tid=130553 ------------------------- 三、配置升级常见问题:http://help.aliyun.com/guide?spm=0.0.0.58.qezBDB&helpId=14981、服务器或者配置能否升级  我们的服务器支持自定义升级,可以根据用户需求,针对cpu,内存,硬盘,带宽进行升级。其中带宽支持按天来进行升级。2、配置升级费用怎么计算  升级的费用是以补差价的形式,用户可以通过用户中心操作的时候,进行查看。3、是否无缝升级或者升级是否会有影响;  升级是无缝升级的,不会有影响。4、升级需要多少时间;  暂时升级需要停机操作大概15分钟左右。(ps:升级存储空间和带宽不需要停机,5分钟左右完成升级) ------------------------- 四、硬盘常见问题:http://help.aliyun.com/guide?spm=0.0.0.59.IXdOXT&helpId=15001、硬盘大小跟购买时不一致(挂载)购买须知有; 如果存在购买时大小差异的问题,需要手动挂载数据盘http://help.aliyun.com/manual?spm=0.0.0.109.aNdyV1&helpId=2712、硬盘能否进行分区;  硬盘分区和格式化for Windows 2008:http://help.aliyun.com/manual?spm=0.0.0.110.8O34rs&helpId=69.3、硬盘的IO性能怎么样;  硬盘的IO性能,可以第三方的测评  http://lusongsong.com/reed/451.html4、硬盘能否扩容;  硬盘可以按需扩容升级 ------------------------- 五、操作系统常见问题:http://help.aliyun.com/guide?spm=0.0.0.60.6fX9nz&helpId=15021、为什么没有win操作系统  内存512M的服务器只有linux系统,内存最少选择1G就有win系统; 2、操作系统是否要收费  linux系统免费,windows系统有版权费,每月30元。(ps:如果是从win操作之间的更换,无需补交费用;但是从lin操作更换成win操作系统,需要收取版权费用); 3、我能否自己安装或者升级操作系统  服务器需要使用我们提供的操作系统,不能自行添加或升级,操作系统可以打补丁; 4、服务器的登录账号密码是什么  linux操作系统的用户名为root,windows操作系统的用户名为administrator,密码将通过短信发送到用户云账号绑定的手机上,同时还会通过邮件发送至您注册时的邮箱里; 5、能否更换操作系统  可以更换操作系统 6、操作系统是否有图形界面  windows操作系统是桌面管理,linux操作系统是命令行,用户如果需要可以自己设置图形管理; 7、如何选择操作系统  操作系统选择建议http://bbs.aliyun.com/read.php?spm=0.0.0.71.0RoWff&tid=120515 ------------------------- 六、带宽常见问题:http://help.aliyun.com/guide?spm=0.0.0.61.yR3TzS&helpId=15041、带宽是否独享  我们提供的带宽是独享的2、带宽单线还是双线,电信还是网通   我们是多线(中国电信、联通、移动、教育网等)接入,确保全国用户访问畅通3、5M带宽怎么理解“5M带宽”是指带宽总出口是5M,下行5M,上行不限4、带宽的价格     了解带宽价格,可以去云服务器自定义配置页面选择查看。http://buy.aliyun.com/?spm=5176.377823.12.25.7j1Mv05、多台服务器之间的内网通信带宽是多少?  不同区域之间云服务器、RDS、OSS内网不互通,同区域之间内网的通信带宽峰值2G ------------------------- RDS常见问题:http://help.aliyun.com/guide?spm=0.0.0.42.PToA7p&lastSortId=4301、RDS数据库连接数是什么意思?  数据库连接数表示应用程序可以同时连接数据库的数量,包括任意连接到数据库的连接均计算在内。 与您应用程序或者网站能够支持的最大用户数没有关系。2、RDS数据库 的MySQL和SQL Server是哪个版本?   RDS For MySQL使用原生MySQL 5.1.61 , 并融入了阿里DBA团队的MySQL补丁;  RDS For SQL Server使用Microsoft SQL Server 2008 R2 SP1 Enterprise English Edition3、一个数据库实例最多有多少个数据库?  一个MySQL数据库实例最多可以包含200个数据库,一个SQL Server数据库实例最多可以包含5个数据库。4、RDS数据库可以升级么?     如果是指数据库版本,RDS目前支持固定版本。RDS for MySQL会融入大量用户需要的补丁,包括功能性的,安全性,稳定性等方面,另外RDS for SQL Server会定期进行数据库补丁升级,包括安全补丁,功能补丁,稳定补丁等,但数据库版本支持固定版本。  如果是规格升级,RDS支持多种规格,用户可以根据自身需要升级到相应的产品规格。5、RDS流量收费吗?  内网传输是免费的(如云服务器M和RDS之间传输);公网传输按照1元/G的标准收费。不到1G的不收费,例如,1.5G按照1G收费。 ------------------------- Re:回 40楼(老任) 的帖子 您好,无论是更换操作系统还是升级配置IP都不会变化的,请知晓,谢谢~ ------------------------- Re:回 41楼(兔子) 的帖子 您好,windows系统30元的版权费现在已经取消了,请知晓,谢谢~ ------------------------- Re:回 44楼(云中漫步) 的帖子 您好,不能自己安装哦,如果遇到其他技术问题可以联系我们售后技术工程师协助解决的,请知晓,谢谢~

chaipanpan 2019-12-02 00:12:42 0 浏览量 回答数 0

回答

二、节点常见问题: http://help.aliyun.com/guide?spm=0.0.0.57.g0RHts&helpId=1496 1、什么线路;   我们的服务器是BGP多线(中国电信、联通、移动、教育网等)接入,确保全国用户访问畅通。 2、节点地理位置;   我们有华东杭州节点和华东青岛节点,没有国外节点 3、能否指定节点位置;   可以根据您的需求选择华东杭州节点或者华东青岛节点 4、试用后节点可以选择么?    阿里云隆重推出华东青岛节点和华东杭州节点。目前所有申请试用的服务器默认华东青岛节点,因服务器不可更换节点,若您试用下来觉得OK可以直接对该台服务器进行续费;如需更换节点,请重新新购。 更多区域使用帮助详见: http://bbs.aliyun.com/read.php?spm=0.0.0.49.GTSotb&tid=130553 ------------------------- 三、配置升级常见问题:http://help.aliyun.com/guide?spm=0.0.0.58.qezBDB&helpId=14981、服务器或者配置能否升级  我们的服务器支持自定义升级,可以根据用户需求,针对cpu,内存,硬盘,带宽进行升级。其中带宽支持按天来进行升级。2、配置升级费用怎么计算  升级的费用是以补差价的形式,用户可以通过用户中心操作的时候,进行查看。3、是否无缝升级或者升级是否会有影响;  升级是无缝升级的,不会有影响。4、升级需要多少时间;  暂时升级需要停机操作大概15分钟左右。(ps:升级存储空间和带宽不需要停机,5分钟左右完成升级) ------------------------- 四、硬盘常见问题:http://help.aliyun.com/guide?spm=0.0.0.59.IXdOXT&helpId=15001、硬盘大小跟购买时不一致(挂载)购买须知有; 如果存在购买时大小差异的问题,需要手动挂载数据盘http://help.aliyun.com/manual?spm=0.0.0.109.aNdyV1&helpId=2712、硬盘能否进行分区;  硬盘分区和格式化for Windows 2008:http://help.aliyun.com/manual?spm=0.0.0.110.8O34rs&helpId=69.3、硬盘的IO性能怎么样;  硬盘的IO性能,可以第三方的测评  http://lusongsong.com/reed/451.html4、硬盘能否扩容;  硬盘可以按需扩容升级 ------------------------- 五、操作系统常见问题:http://help.aliyun.com/guide?spm=0.0.0.60.6fX9nz&helpId=15021、为什么没有win操作系统  内存512M的服务器只有linux系统,内存最少选择1G就有win系统; 2、操作系统是否要收费  linux系统免费,windows系统有版权费,每月30元。(ps:如果是从win操作之间的更换,无需补交费用;但是从lin操作更换成win操作系统,需要收取版权费用); 3、我能否自己安装或者升级操作系统  服务器需要使用我们提供的操作系统,不能自行添加或升级,操作系统可以打补丁; 4、服务器的登录账号密码是什么  linux操作系统的用户名为root,windows操作系统的用户名为administrator,密码将通过短信发送到用户云账号绑定的手机上,同时还会通过邮件发送至您注册时的邮箱里; 5、能否更换操作系统  可以更换操作系统 6、操作系统是否有图形界面  windows操作系统是桌面管理,linux操作系统是命令行,用户如果需要可以自己设置图形管理; 7、如何选择操作系统  操作系统选择建议http://bbs.aliyun.com/read.php?spm=0.0.0.71.0RoWff&tid=120515 ------------------------- 六、带宽常见问题:http://help.aliyun.com/guide?spm=0.0.0.61.yR3TzS&helpId=15041、带宽是否独享  我们提供的带宽是独享的2、带宽单线还是双线,电信还是网通   我们是多线(中国电信、联通、移动、教育网等)接入,确保全国用户访问畅通3、5M带宽怎么理解“5M带宽”是指带宽总出口是5M,下行5M,上行不限4、带宽的价格     了解带宽价格,可以去云服务器自定义配置页面选择查看。http://buy.aliyun.com/?spm=5176.377823.12.25.7j1Mv05、多台服务器之间的内网通信带宽是多少?  不同区域之间云服务器、RDS、OSS内网不互通,同区域之间内网的通信带宽峰值2G ------------------------- RDS常见问题:http://help.aliyun.com/guide?spm=0.0.0.42.PToA7p&lastSortId=4301、RDS数据库连接数是什么意思?  数据库连接数表示应用程序可以同时连接数据库的数量,包括任意连接到数据库的连接均计算在内。 与您应用程序或者网站能够支持的最大用户数没有关系。2、RDS数据库 的MySQL和SQL Server是哪个版本?   RDS For MySQL使用原生MySQL 5.1.61 , 并融入了阿里DBA团队的MySQL补丁;  RDS For SQL Server使用Microsoft SQL Server 2008 R2 SP1 Enterprise English Edition3、一个数据库实例最多有多少个数据库?  一个MySQL数据库实例最多可以包含200个数据库,一个SQL Server数据库实例最多可以包含5个数据库。4、RDS数据库可以升级么?     如果是指数据库版本,RDS目前支持固定版本。RDS for MySQL会融入大量用户需要的补丁,包括功能性的,安全性,稳定性等方面,另外RDS for SQL Server会定期进行数据库补丁升级,包括安全补丁,功能补丁,稳定补丁等,但数据库版本支持固定版本。  如果是规格升级,RDS支持多种规格,用户可以根据自身需要升级到相应的产品规格。5、RDS流量收费吗?  内网传输是免费的(如云服务器M和RDS之间传输);公网传输按照1元/G的标准收费。不到1G的不收费,例如,1.5G按照1G收费。

chaipanpan 2019-12-02 00:52:43 0 浏览量 回答数 0

回答

Java Java核心技术·卷 I(原书第10版)| Core Java Volume 讲的很全面,书中的代码示例都很好,很适合Java入门。 但是作者不太厚道的是把现在没人用的GUI编程放在了第一卷,基本上10~13章是可以不用读的。 Java性能权威指南|Java Performance: The Definitive Guide 市面上介绍Java的书有很多,但专注于Java性能的并不多,能游刃有余地展示Java性能优化难点的更是凤毛麟角,本书即是其中之一。 通过使用JVM和Java平台,以及Java语言和应用程序接口,本书详尽讲解了Java性能调优的相关知识,帮助读者深入理解Java平台性能的各个方面,最终使程序如虎添翼。 实战Java高并发程序设计|葛一鸣 由部分段落的行文来看,搬了官方文档。 也有一些第一人称的叙述和思考,也能看出作者也是花了一点心思的。胜在比较基础,涉及到的知识点也还很全面(讲到了流水线计算和并发模型这些边边角角的),但是由于是编著,全书整体上不够统一和深入,适合作为学习高并发的第一本工具书。 Java 8实战 对Java8的新特性讲解的十分到位,尤其是lamdba表达式和流的操作。 再者对于Java8并发处理很有独到见解。对于并行数据处理和组合式异步编程还需要更深的思考才能更加掌握。 推荐给再用java8但没有去真正了解的人看,有很多你不知道的细节、原理和类库设计者的用心良苦在里面、内容没有很难,抽出几个小时就能看完,花费的时间和收获相比,性价比很高。 Java并发编程实战 先不谈本书的内容如何,光书名就足够吸引不少目光。“并发”这个词在Java世界里往往和“高级、核心”等字眼相联系起来,就冲着这两个字,都将勾起软件工程师们埋藏在心底那种对技术的探索欲和对高级API的驾驭感。 程序员嘛,多少都有点职业病。其实Java对“并发”优化从未停止过,从5.0到7.0,几乎每个版本的新特性里,都会针对前一版本在“并发”上有所改进。这种改进包括提供更丰富的API接口、JVM底层性能优化等诸多方面。 Thinking in Java 很美味的一本书,不仅有icecreamm,sundae,sandwich,还有burrito!真是越看越饿啊~ Effective Java中文版(第3版)|Effective Java Third Edition Java 高阶书籍,小白劝退。介绍了关于Java 编程的90个经验技巧。 作者功力非常强悍,导致这本书有时知识面迁移很广。总之,非常适合有一定Java开发经验的人阅读提升。 深入理解Java虚拟机(第3版)| 周志明 浅显易懂。最重要的是开启一扇理解虚拟机的大门。 内存管理机制与Java内存模型、高效并发这三章是特别实用的。 Java虚拟机规范(Java SE 8版)|爱飞翔、周志明 整本书就觉得第二章的方法字节码执行流程,第四章的前8节和第五章能看懂一些。其他的过于细致和琐碎了。 把Java字节码讲的很清楚了,本质上Java虚拟机就是通过字节码来构建的一套体系罢了。所以字节码说的非常细致深入。 数据&大数据 数据结构与算法分析|Data Structures and Algorithm Analysis in Java 数据结构是计算机的核心,这部书以java语言为基础,详细的介绍了基本数据结构、图、以及相关的排序、最短路径、最小生成树等问题。 但是有一些高级的数据结构并没有介绍,可以通过《数据结构与算法分析——C语言描述》来增加对这方面的了解。 MySQL必知必会 《MySQL必知必会》MySQL是世界上最受欢迎的数据库管理系统之一。 书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握的知识,使他们不经意间立刻功力大增。 数据库系统概念|Datebase System Concepts(Fifth Edition) 从大学读到现在,每次拿起都有新的收获。而且这本书还是对各个数据相关领域的概览,不仅仅是数据库本身。 高性能MySQL 对于想要了解MySQL性能提升的人来说,这是一本不可多得的书。 书中没有各种提升性能的秘籍,而是深入问题的核心,详细的解释了每种提升性能的原理,从而可以使你四两拨千斤。授之于鱼不如授之于渔,这本书做到了。 高可用MySQL 很实用的书籍,只可惜公司现有的业务和数据量还没有达到需要实践书中知识的地步。 利用Python进行数据分析|唐学韬 内容还是跟不上库的发展速度,建议结合里面讲的库的文档来看。 内容安排上我觉得还不错,作者是pandas的作者,所以对pandas的讲解和设计思路都讲得很清楚。除此以外,作者也是干过金融数据分析的,所以后面专门讲了时间序列和金融数据的分析。 HBase 看完影印版第一遍,开始以为会是大量讲API,实际上除了没有将HBase源代码,该讲的都讲了,CH8,9章留到最后看的,确实有点顿悟的感觉,接下来需要系统的看一遍Client API,然后深入代码,Come ON! Programming Hive Hive工具书,Hive高级特性。 Hadoop in Practice| Alex Holmes 感觉比action那本要强 像是cookbook类型的 整个过完以后hadoop生态圈的各种都接触到了 这本书适合当参考手册用。 Hadoop技术内幕|董西成 其实国人能写这样的书,感觉还是不错的,不过感觉很多东西不太深入,感觉在深入之前,和先有整体,带着整体做深入会更好一点, jobclient,jobtracer,tasktracer之间的关系最好能系统化 Learning Spark 很不错,core的原理部分和api用途解释得很清楚,以前看文档和代码理解不了的地方豁然开朗。 不足的地方是后几章比较弱,mllib方面没有深入讲实现原理。graphx也没有涉及 ODPS权威指南 基本上还算一本不错的入门,虽然细节方面谈的不多,底层也不够深入,但毕竟是少有的ODPS书籍,且覆盖面很全,例子也还行。 数据之巅|徐子沛 从一个新的视角(数据)切入,写美国历史,统计学的发展贯穿其中,草蛇灰线,伏脉千里,读起来波澜壮阔。 消息队列&Redis RabbitMQ实战 很多年前的书了,书中的例子现在已经不适用了,推荐官方教程。 一些基础还是适用,网上也没有太多讲rab的书籍,将就看下也行,我没用过所以…. Apache Kafka源码剖析|徐郡明 虽然还没看,但知道应该不差。我是看了作者的mybatis源码分析,再来看这本的,相信作者。 作者怎么有这么多时间,把框架研究的这么透彻,佩服,佩服。 深入理解Kafka:核心设计与实践原理|朱忠华 通俗易懂,图文并茂,用了很多图和示例讲解kafka的架构,从宏观入手,再讲到细节,比较好,值得推荐。 深入理解Kafka是市面上讲解Kafka核心原理最透彻的,全书都是挑了kafka最核心的细节在讲比如分区副本选举、分区从分配、kafka数据存储结构、时间轮、我认为是目前kafka相关书籍里最好的一本。 Kafka 认真刷了 kafka internal 那章,看了个talk,算是入了个门。 系统设计真是门艺术。 RocketMQ实战与原理解析|杨开元 对RocketMQ的脉络做了一个大概的说明吧,深入细节的东西还是需要自己看代码 Redis设计与实现|黄健宏 部分内容写得比较啰嗦,当然往好了说是对新手友好,不厌其烦地分析细节,但也让整本书变厚了,个人以为精炼语言可以减少20%的内容。 对于有心一窥redis实现原理的读者来说,本书展露了足够丰富的内容和细节,却不至于让冗长的实现代码吓跑读者——伪代码的意义在此。下一步是真正读源码了。 Redis 深度历险:核心原理与应用实践|钱文品 真心不错,数据结构原理+实际应用+单线程模型+集群(sentinel, codis, redis cluster), 分布式锁等等讲的都十分透彻。 一本书的作用不就是系统性梳理,为读者打开一扇窗,读者想了解更多,可以自己通过这扇窗去Google。这本书的一个瑕疵是最后一章吧,写的仓促了。不过瑕不掩瑜。 技术综合 TCP/IP详解 卷1:协议 读专业性书籍是一件很枯燥的事,我的建议就是把它作为一本手册,先浏览一遍,遇到问题再去详细查,高效。 Netty in Action 涉及到很多专业名词新概念看英文原版顺畅得多,第十五章 Choosing the right thread model 真是写得太好了。另外结合Ron Hitchens 写的《JAVA NIO》一起看对理解JAVA NIO和Netty还是很有帮助的 ZooKeeper 值得使用zookeeper的人员阅读, 对于zookeeper的内部机制及api进行了很详细的讲解, 后半部分深入地讲解了zookeeper中ensemble互相协作的流程, 及group等高级配置, 对zookeeper的高级应用及其它类似系统的设计都很有借鉴意义. 从Paxos到Zookeeper|倪超 分布式入门鼻祖,开始部分深入阐述cap和base理论,所有的分布式框架都是围绕这个理论的做平衡和取舍,中间 zk的原理、特性、实战也讲的非常清晰,同时讲cap理论在zk中是如何体现,更加深你对cap的理解. 深入理解Nginx(第2版)|陶辉 云里雾里的快速读了一遍,主要是读不懂,读完后的感受是设计的真好。 原本是抱着了解原理进而优化性能的想法来读的,却发现书中的内容都是讲源码,作者对源码的注释超级详细,非常适合开发者,但不适合使用者,给个五星好评是因为不想因为我这种菜鸡而埋没了高质量内容。 另外别人的代码写的真好看,即便是过程式语言程序也吊打我写的面向对象语言程序。 作者是zookeeper的活跃贡献者,而且是很资深的研究员,内容比较严谨而且较好的把握住了zk的精髓。书很薄,但是没有废话,选题是经过深思熟虑的。 深入剖析Tomcat 本书深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发Tomcat组件,或者扩展已有的组件。 Tomcat是目前比较流行的Web服务器之一。作为一个开源和小型的轻量级应用服务器,Tomcat 易于使用,便于部署,但Tomcat本身是一个非常复杂的系统,包含了很多功能模块。这些功能模块构成了Tomcat的核心结构。本书从最基本的HTTP请求开始,直至使用JMX技术管理Tomcat中的应用程序,逐一剖析Tomcat的基本功能模块,并配以示例代码,使读者可以逐步实现自己的Web服务器。 深入理解计算机系统 | 布莱恩特 无论是内容还是纸张印刷,都是满分。计算机学科的集大成之作。引导你如何练内功的,算是高配版本的计算机导论,目的是釜底抽薪引出来操作系统、组成原理这些专业核心的课程。帮助我们按图索骥,点亮一个一个技能树。 架构探险分布式服务框架 | 李业兵 刚看前几章的时候,心里满脑子想得都是这特么贴一整页pom文件代码上来干鸡毛,又是骗稿费的,买亏了买亏了,后来到序列化那章开始,诶?还有那么点意思啊。 到服务注册中心和服务通讯,60块钱的书钱已经赚回来了。 知识是无价的,如果能花几十块钱帮你扫了几个盲区,那就是赚了。 深入分析JavaWeb技术内幕 | 许令波 与这本书相识大概是四年前是在老家的北方图书城里,当时看到目录的感觉是真的惊艳,对当时刚入行的自己来说,这简直就是为我量身定做的扫盲科普集啊。 但是可惜的是,这本书在后来却一直没机会读上。然后经过四年的打怪升级之后,这次的阅读体验依旧很好。 其中,java编译原理、 Servlet工作原理、 Tomcat、spring和iBatis这几章的收获很大。 前端 jQuery 技术内幕| 高云 非常棒的一本书,大大降低了阅读jquery源码的难度(虽然还是非常难)。 Head First HTML与CSS(第2版) 翻了非常久的时间 断断续续 其实从头翻到尾 才发现一点都不难。 可我被自己的懒惰和畏难情绪给拖累了 简单说 我成了自己往前探索的负担。网页基础的语法基本都涵盖了 限于文本形态 知识点都没法像做题一样被反复地运用和复习到。通俗易懂 这不知算是多高的评价? 作为入门真心算不错了 如果更有耐心 在翻完 HTML 后 对 CSS 部分最好是可以迅速过一遍 找案例练习估计更好 纸上得来终觉浅 总是这样。 JavaScript高级程序设计(第3版) JavaScript最基础的书籍,要看认真,慢慢地看,累计接近1000小时吧。而且对象与继承,性能优化,HTML5 api由于没有实践或缺乏代码阅读量导致看的很糊涂,不过以后可以遇到时再翻翻,或者看更专业的书。 深入理解ES6 Zakas的又一部杰作,他的作品最优秀的地方在于只是阐述,很少评价,这在帮助我们夯实基础时十分有意义,我也喜欢这种风格。 我是中英文参照阅读的,译本后半部分有一些文字上的纰漏,但是总体来说忠实原文,水平还是相当不错,希望再版时可以修复这些文字问题。 高性能JavaScript 还是挺不错的。尤其是对初学者。总结了好多程序方面的好习惯。 不过对于老手来说,这些常识已经深入骨髓了。 深入浅出Node.js|朴灵 本书是我看到现在对Node.JS技术原理和应用实践阐述的最深入,也最全面的一本书。鉴于作者也是淘宝的一位工程师,在技术总是国外好的大环境下,没有理由不给本书五颗星。 作者秉着授人于鱼不如授人于渔的精神,细致入微的从V8虚拟机,内存管理,字符串与Buffer的应用,异步编程的思路和原理这些基础的角度来解释Node.JS是如何工作的,比起市面上众多教你如何安装node,用几个包编写一些示例来比,本书绝对让人受益匪浅。 认真看完本书,几乎可以让你从一个Node的外行进阶到专家的水平。赞! 总结 其实我觉得在我们现在这个浮躁的社会,大家闲暇时间都是刷抖音,逛淘宝,微博……他们都在一点点吞噬你的碎片时间,如果你尝试着去用碎片的时间看看书,我想时间久了你自然能体会这样的好处。 美团技术团队甚至会奖励读完一些书本的人,很多公司都有自己的小图书馆,我觉得挺好的。 文章来自:敖丙

剑曼红尘 2020-03-20 14:52:22 0 浏览量 回答数 0

回答

一、系统迁移捅了13亿用户的娄子 故事,是从一桩“离婚再嫁”的案子开始的。 离婚再嫁的主角,是英国银行TSB。 2015年,TSB银行结束了与劳埃德银行(Lloyds Bank)长达20年的“婚姻”,从他们合并的集团中拆分出来,并卖身给了新欢、西班牙公司萨瓦德尔(Sabadell)集团,收购价17亿英镑,按当时的汇率大概是158亿人民币。 然而,过去的20年,世界变了太多,银行业也进步了太多。20年的“婚姻”留给TSB银行的,还有和“前夫”剪不断理还乱的IT系统。 TSB银行540万客户的数十亿记录,都还留在“前夫”劳埃德银行的系统里,而且因为缘分已断,不能白嫖人家的系统,每年还要给前夫交1亿英镑(大约9.3亿人民币)的费用。 这就好像肉身虽然已经和“新欢”在一起,但支付宝和微信账号还是跟“前夫”共用一套,而且还要给“前夫”付账号租金,自然令人不爽。 于是,在筹备了许久之后,2018年,他们终于要行动了:把“前夫”IT系统里的客户信息记录,迁移到“新欢”专门为TSB银行准备的新系统里。 他们把迁移的日子,定在了4月22日星期日的晚上,先把银行的IT系统离线,迁移完之后再上线,恢复客户访问自己银行账户的权限。 为了这场迁移,他们已经投入了超过2500人年的人力成本,西班牙“新欢”集团的CEO在前一年的圣诞节就大声放话:这是全欧洲史无前例的大项目,我们投入了1000多名专业人才,将极大地促进我们在英国的增长。 不过,虽然大佬们在台上豪言壮语,实际上负责迁移的员工们心里却慌得一逼。这个迁移项目本来要筹备18个月,结果时间超了,预算也超了,事情难办的很。 Flag果然不能立太早,打脸的结果很快就来了。 迁移结束,客户的访问权限,他们以为万无一失,但就在20分钟后,收到了问题报告: 有的客户发现自己的钱不见了; 有的客户花了一点小钱,账户里却记录成了花费数千美元; 有的客户登录上去之后,发现不是自己的账户,而是看到了别人的银行账户。 13亿客户的账户记录都出了问题,于是,他们把TSB银行骂成狗,金融监管机构们则连夜找银行喝茶。 而此后的几个星期,银行都在拼命的恢复系统,但数以百万计的客户们已经人心惶惶,拼命的把自己存在TSB银行的钱取出来。 TSB银行,被自己捅的篓子扔进了地狱模式。 而问题的根源,在于测试。 英国金融监管机构金融行为监管局(FCA)首席执行官Andrew Bailey在事故几周后对外公开表示,造成系统混乱的很大原因在于缺少测试,而TSB银行请来救急的IBM专家也发现,TSB银行没有采用严格的上线标准。 而且由于地球上的金融体系都是相连的,事故所造成的错误被永久的保留在了金融体系里,不可逆转。 这起弥天大祸,也让TSB银行赔了很多钱。为了赔偿客户、解决系统出问题后浑水摸鱼的交易、找第三方帮忙总共花了3.302亿英镑,按当时汇率算大约28.4亿人民币。 而TSB的乙方、IT提供商Sabis也因为这起事故收到了1.53亿英镑(超过13亿人民币)的赔偿账单。 而受此影响,TSB银行当年亏损了1.054亿英镑(9.2亿人民币),CEO Paul Pester引咎辞职。 业绩这么差,银行的经营也难以为继,今年11月底TSB关闭了英国86个分行,至少400个工作岗位也因此消失。 二、银行系统很复杂 信息化时代,银行的IT系统也变得越来越复杂。 六十年前,人们只能选择在柜台存取现金,普通客户并没有机会直接接触计算机系统。当时,银行虽然也启用了巨型计算机,但它们只会在一天或一周交易结束的时候对纸质数据进行汇总。 也就是说,银行的IT系统仅由银行员工使用,银行与客户在柜台上的交互用的还是纸质工具。 这种情况在1967年发生了改变。 这一年,世界上第一台自动柜员机(ATM)在英国诞生,并被安装到伦敦北部的巴克莱银行Enfield分行。从此,银行和客户交互的方式发生重大变革。 ITRS Group首席执行官盖伊·沃伦(Guy Warren)解释说: 直到真正的ATM和在线银行业务出现,公众才可以直接访问银行的IT系统。 这还仅仅是个开始。 全球互联的时代,互联网和移动银行的发展进一步拉近了客户和银行IT系统之间的距离,而这样的系统,也越来越成为银行赖以运营的关键所在。 或许你会觉得,登个支付宝/微信,亮出付款码,让小钱钱在银行跟银行之间发生小小的流动,并没有什么难度。但事实上,每一次信息的加载和刷新背后,都发生了复杂的数据移动: 每一次动作可能关联到许多个单独的系统,所有这些系统都必须彼此交互,并与核心大型计算机连通。系统要现在后端复制数据,将现金从一个账户转移到另一个账户,保持同步更新。 而这样的运算量,还要乘以数十亿倍。 根据世界银行的数据,现在,全球至少有69%的成年人都拥有银行账户。人们每一天都在通过银行账户支付账单、贷款还款、订阅各种服务……并且,这些活动常常是跨行,甚至跨国进行的。 一家银行内部的多个IT系统(移动银行、ATM等),不仅需要彼此交互,甚至还必须跟其他国家的银行建立联系。比如我在国内办了一张visa信用卡,在美国也要能消费才行。 三、迁移问题很麻烦 TSB正是栽在了这样的高度复杂性上。 IBM在为TSB编写的报告中指出:新应用程序的组合,对先进微服务的应用和双活数据中心的使用,导致了TSB生产中的复合风险。 如何正确地处理银行IT系统迁移中出现的问题,对于任何一个银行来说,都是不小的挑战。 其中,大量的事前规划和测试工作是不可避免的。 像汇丰银行这样的跨国银行,具有高度复杂、相互关联的系统,这些系统会定期进行测试、迁移和更新。 即使在这方面如此经验丰富,汇丰银行的前IT主管兰开斯特仍坦承:诀窍就是让员工在这件事上付出更多的时间。 他还指出,TSB的IT系统迁移是一件很复杂的事: 我不确定他们是不是真的意识到了这件事的复杂程度。他们甚至没有完全想好要怎么去测试系统。 FCA首席执行官Andrew Bailey则表示: TSB的这一事故反映出他们缺少强大的回归测试。 注:回归测试是软件测试的一种,旨在检验软件原有功能在修改后是否保持完整 而最新的事故报告也引起了hacker news上网友们的热烈讨论。 有网友表示,如果TSB能选择小规模多次迁移,而不是在某一天进行大爆炸式迁移,那这种严重的事故可能就不会发生。 花几周/几个月的时间在生产过程中进行检查,以确保旧数据库和新数据库返回的结构相同。最终,将数据都转移到新数据库中,并在一段时间之后再关闭旧的数据库。这样做效果是比较好的。 而对测试不足导致了银行系统瘫痪的这一调查结论,有人吐槽说: 作为测试工程师,我一点也不意外。花费更多的时间、投入更多的人员来打造更好的测试架构,对于很多公司来说都是“可以节省的成本”。 经理们总是在设定的上线日期前问:“测试咋能花那么多时间?!”真要出事了他们又开始甩锅了。 也有网友严厉批评道:TSB的问题不应该说是测试不足,而是在多个层面上都测试不足,并且缺少可恢复的备份。 也有人指出,避免出错最简单的办法就是减少变化。 问题在于,无论是银行还是其他领域的公司,业务都是在不断进化的。 根据FCA发布的数据,从2017年到2018年,英国金融服务部门报告的技术中断增加了187%。 盖伊·沃伦就认为:系统停机不会消失。问题在于,可接受的度在哪里? 你怎么看呢?在评论区留下你的看法~

有只黑白猫 2020-01-20 11:22:13 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站