Yi's Blog

一些对阿里云真诚的吐槽

2019-11-24

写在最前

首先说明整篇文章基本都是在把阿里云和 AWS 对比,提出了很多我认为阿里云做的不好的地方。不得不承认,阿里云是公认的国内最好的云服务,但跟AWS相比还差很多。一定会有朋友说,AWS 起步早,有技术积累,但以下我要说的,大部分都不涉及什么深奥的核心技术,而是用心就能改进的地方。不吹不黑,也无意引战,AWS 再好用也是美国人的 AWS,阿里云有再多缺点,也是我们中国人的阿里云。作为两年多的重度使用用户(每天工作都要用AWS和阿里云),真心希望阿里云可以做的更好,中国的云服务可以做的更好!

我接下来说的一些问题都不涉及技术,完全是用户体验上的痛点。

控制台

控制台首页

阿里云控制台首页
AWS控制台首页

  1. 页头导航栏

AWS 控制台的头部导航用户可以自定义常用的服务,而且这个导航栏是全局范围内都存在的,也就是说你可以在任意一个页面一次点击就跳转到你所需要的服务。而阿里云页头上的一排导航,我几乎没有用过,这么黄金的位置,为什么要放这些不常用的入口呢?或者说,为什么不能用自定义的方式,把选择的权利交给用户呢?

  1. 用户登录状态

很多web系统都会把用户的登录信息(用户名、头像、电话或是邮箱)显示在页面右上角,这是一个很常见的设计。阿里云也在这里放了一个头像,但问题在于这里只有一个头像而没有用户名,并且头像似乎也不能改,大家都一样,那我怎么才能知道我登录的到底是哪个账号呢?也许个人用户对这里没有什么体会,但作为企业用户,我有好几个账户,每个账户下面还有好几个子账号,我有好几次去找我的服务器找不到,然后才发现登录的账号不对。我需要把鼠标移上去悬停,然后在弹出的悬浮窗中才能看到。其实页面上的空间很充足啊,为什么不能把用户名显示出来呢?再来看一下 AWS,把用户名和账户名都显示在右上角了,一目了然。

  1. 右侧公告栏

阿里云控制台首页的右侧公告栏显得有些杂乱,流量包降价、发票停开通知、第六代服务器重磅发售、云大使推荐奖励,不能说完全是广告吧,但总给我一种逛淘宝感觉,用 adblock 屏蔽掉侧边栏倒是清爽不少。

再看一下 AWS 控制台首页的侧边栏就非常克制,几条链接全部指向官方文档,从这里我反而可以了解一些新的技术和解决方案。总体给人一种很专业的感觉。

  1. 页面主体

阿里云和 AWS 控制台首页的主体部分都放置了自家各种云服务产品的导航。

阿里云在这里设计了两栏,最近使用热门产品列表。对大部分用户来说,最近使用和热门产品的重叠率是很高的,大部分应该都是 ECS、RDS、OSS、负载均衡、域名这些吧。这两栏放在一起就显得有些冗余并且占用了页面中部最宝贵的空间。而如果我需要使用函数计算、全站加速等功能时,就只能点开左侧的二级菜单去找了(或者在下方的搜索栏中查找,下面会说到)。

AWS 这里的设计,先是一个搜索框,接下来是最近使用的服务,下面是所有服务的列表。所有服务列表还按照计算、存储、数据库等类别进行了分类。最近使用和所有服务两栏还可以折叠,如果不需要折叠起来就是了。通常我会在前文说过的页头导航栏上快速切换我需要的服务,没有固定在导航栏的服务我可以再这里通过分类或者搜索快速找到。

  1. 产品搜索

最后我们看一下控制台首页上这个搜索框。

aws-services-search

上图是 AWS 控制台首页的搜索框,这么看来也没什么特别之处,平平无奇。但接下来对比一下阿里云的搜索框,你就会知道,优秀的设计才会让用户没有感觉,自然而然。

aliyun-services-search

上面就是阿里云的搜索框了,在搜索结果栏中,英文在最左边,中文在最右边,要扭着头才能看完啊。向左对齐很难做么?再来看下面这个问题。

aliyun-services-search-2

暂无是什么鬼?哦,原来这几项产品没有起中文名,于是就有了上面的结果。如果说这两个问题无伤大雅,又不是不能用,那下面这个就是影响功能的 Bug 了。

aliyun-services-search-3

随手试了试,发现函数计算这个产品竟然在这里搜索不出来,于是多试了几个,同样搜不出来的还有公网IP、高速通道、日志服务等等。我不知道这是 Bug 还是有意为之的设计,如果有的产品能搜到,有的产品搜不到,那我下次希望通过这个搜索框来查找产品导航时就很缺乏信心,我不确定它能给我返回正确的结果。这个在首页上的搜索功能我认为只能算是个半成品。

阿里云 EC2 首页对比 AWS ECS 首页

阿里云 ECS 和 AWS EC2 都是最常用的云服务器产品,下面来对比一下这两款产品的控制台首页。

aliyun-ecs-console-index

打开阿里云 ECS 首页,给我的第一印象就是花里胡哨,不专业。我想了一下,造成这种「不专业感」的来源可能如下:

  1. 除普通文本黑白两色外,还引入了红、绿、蓝、橙、灰 5种配色。
  2. 页面上过多的提示红标。左侧菜单中的 new 角标,右上角的红色圆点一共有8个。
  3. 上图中我圈出的几个数字,页面上明明有空间,却用省略号显示。特别是上面的快照容量 37170.82 改成了 37170.8…,这不是越省略越长吗?其实这里还不如直接取整显示好了。这样的问题在其他各处还有很多,后面还会提到。
  4. 右侧的重要提醒设计了一个轮播图。重要提醒里面提醒的竟然是服务器限时6折,双十一优惠!还真是”重要”提醒啊。作为一个用于生产环境的企业级产品,在重要提醒里面打广告,我真的无法理解,让我感到很不专业,很不可靠。

同样的,对比下面的 AWS EC2 控制台首页,白底黑字蓝色高亮,配色简洁,布局规整干净,从视觉上就让人感到这是很严肃的事情,这是在操作生产环境的服务器而不是在逛淘宝。

aws-ec2-console-index

阿里云 ECS 实例列表对比 AWS EC2 实例列表

这次我们先来看看 AWS EC2 的实例列表是怎样的吧。

aws-ec2-instances-list

  1. 页面主要分为上下两部分,上面一部分是实例列表,下面一部分用来显示选中实例的详细信息,上下两栏的高度可以通过鼠标拖动自由调整。
  2. 在24寸1080P的显示器上,上下两栏各占一半时,上半部分的实例列表大约可以展示10项条目,详情面板最小化时,实例列表可展示20项以上的条目。
  3. 在实例列表上通过鼠标右击可以呼出功能菜单。
  4. 点击列表表头可实现任意字段的升降序排列。
  5. 详情面板分有四个标签页,分别是:描述、状态检查、监控、标签。
    5.1 描述标签页中展示了选中实例几乎所有的你想要查询的属性,包括所在子网、存储类型、镜像ID甚至安全组的每一条规则你都可以在这里快速的找到。
    5.2 监控标签页可以看到选中实例来自 CloudWatch 的各种监控指标。值得一提的是,如图中所示,当选中多个实例时,可以将这些实例的监控指标堆叠在同一图表中查看,非常有利于检查同一组业务服务器的运行状态。
    aws-instances-list-monitor-tab
    5.3 标签面板似乎没什么好说,不就是用 table 列出来么?等下看看阿里云是怎么做的就知道我为什么专门提到这个平淡无奇的标签面板了。
    aws-instances-list-tags-tab
  6. 最后要说的也是最棒的就是上面的那条搜索框了,几乎任何字段(包括自定义标签)都可以模糊匹配!看看介绍吧,支持关键字搜索、高级搜索、逆向搜索、按字段搜索、部分搜索,甚至还支持正则表达式!如果你是新手,你完全可以不理会这些规则,敲出你知道关键词,它会帮你查找出来的。如果你对此非常熟悉,你可以写出复杂的查询规则,它甚至比 SQL 还要顺手。

aws-ec2-instances-list-search

你是否对上面的这些功能或是特性习以为常,或是觉得不过如此?那么看看阿里云是怎么做的吧。

aliyun-ecs-instances-list

  1. 在同样的24寸1080P显示器上,一屏最多只能展示12项条目,这是因为每一项条目中都是两行文本。比如实例ID/名称这一列,第一行显示实例ID,第二行显示实例名称。又比如配置这一列,第一行显示了具体的配置8 vCPU 32 GiB (I/O优化),第二行显示该配置的类型ecs.g5.2xlarge。两行文本的设计有什么优点呢?那就是当表格宽度不够时,可以尽可能多的利用垂直空间把信息展示出来。但在图中可以看到,即使列宽非常充足,每一行的实例名称后面依然是省略号表示。通过实验我发现这里的省略逻辑并是不根据列宽动态调整的,而是写死了16个字符之后的内容用省略号表示,你的屏幕再宽,页面空间再大也没有用。这就有一个很严重的问题,我一组业务服务器名称的前缀都是一样,只有后缀不一样,但现在一眼望过去全是省略号,根本没办法从实例名称来区分服务器。那实例名称这个功能点,我认为基本是不可用的。而配置这一列,我完全可以通过g5.2xlarge这一规格类型看出它的实际配置是8 vCPU 32 GiB (I/O优化),但阿里云在这里不惜增加行高来展示这一冗余的信息,导致了整个页面展示的条目行数更少。这里用 Tooltip 来展示是不是会更好呢?
  2. 阿里云 ECS 的实例列表上不支持右键菜单,所有的操作都通过每一行条目右侧的几个按钮实现。这样的设计又带来如下几个问题:
    2.1 每一行都有这么同样的5个按钮,占用了宝贵的页面空间。
    2.2 鼠标在列表上移动的时候没有行高亮显示,我去点击右边的操作按钮时,并不能很确定我要点击按钮和我前面看到的实例名在同一行上,很可能点错行导致误操作,造成的后果可能会很严重。
    2.3 因为这里的空间有限,所以阿里云在这里放了一个更多按钮,点击之后又出现了一个下拉菜单才能看到更多的功能。这样就导致操作比较繁琐。
  3. 如果要查看某个实例更多的详细信息,就要跳转的实例的详情页。这也带来了几个问题:
    3.1 跳转新页面比较耗时。
    3.2 如果要查看多个实例的详细信息互相对比,就要在页面之前来回跳转。
    3.3 不是所有的信息都能在实例详情中看到。比如实例上配置的安全组规则,要在实例详情页上再次跳转到安全组规则页面才能看到。更严重的是,查看完安全组规则后点击返回按钮,回到的竟然是安全组列表,而不是从我跳过来的实例详情页面。如果我要继续查看该实例的其他属性,我就需要重新去实例列表中搜索它。
  4. 查看实例的监控也只能一个实例一个实例的查看,如果我有一组业务服务器想要在监控中做对比,抱歉,做不到。
  5. 还记得上面说过要看看阿里云是怎么展示实例标签的吗?是这样的,在实例列表上,把鼠标移到这个标签icon上,标签就显示出来了。既然悬浮气泡显示了,又不占空间,为什么不能Key-Value分行对齐显示呢?这一整行看过去眼睛都花了。
    aliyun-ec2-instances-list-tags
    那么在实例详情页面上会好一点吗?如下图,我真的想不明白,就这几个标签,怎么就不能大大方方显示出来呢?
    aliyun-ec2-details-tags

其他细节

  1. 创建新实例时,竟然只能选择一个安全组。如果要添加多个,只能在服务器创建好后再去配置。如果同时创建多个服务器,那么工作量翻倍。
  2. 创建新实例时,“默认资源组”竟然不是默认选中的,还有手动的再来选一次。

    aliyun-create-instance-select-resource-group

  3. 未完待续…

API/SDK及文档

API

阿里云各产品的 API 格式都没有统一好,有的分页用参数PageNumber,有的分页用Marker;响应中表示总记录数的字段目前我发现的就有四种形式:TotalCountTotalRecordCountTotalItemNumTotalItems,其他的参数更是没什么规范可言。

AWS 的 API 就非常规范严谨,所有的产品都遵循同一套规范,当你熟悉某一种产品的 API 之后,你甚至不用怎么看文档就能去调用其他产品的 API。

SDK

Python SDK 更是一股浓浓的 Java 风格,抛开设计模式那一套先不谈,就连最基本的 PEP-8 的编码规范都没有遵守。相信用其他语言的同学也能感受的到。下面这一段是从阿里云官方文档上节选的代码示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# encoding: utf-8
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkfnf.request.v20190315 import CreateFlowRequest
from aliyunsdkfnf.request.v20190315 import StartExecutionRequest
from aliyunsdkfnf.request.v20190315 import DescribeExecutionRequest
from aliyunsdkfnf.request.v20190315 import GetExecutionHistoryRequest

flow_definition_type = "FDL"
flow_name = "xxx"
flow_definition = "xxx"
flow_description = "some descriptions"
role_arn = "acs:ram::${Your_Account_ID}:${Your_Role}"
execution_name = "xxx"

def create_flow(fnf_cli):
request = CreateFlowRequest.CreateFlowRequest()
request.set_Type(flow_definition_type)
request.set_Description(flow_description)
request.set_Definition(flow_definition)
request.set_RoleArn(role_arn)
request.set_Name(flow_name)
return fnf_cli.do_action_with_exception(request)

AWS 的 Python SDK 是 boto3,一行命令安装,所有的产品都可以用,在调用方式、函数命名上也一脉相承。

文档

AWS 的文档简直可以说是业界标杆,读起来就像是一部技术白皮书。阿里云的文档,错误的内容、过时的信息,跟 API 版本对不上号等问题一大堆。

最后

写到后面越来越不想写了,用过这两家云服务的小伙伴自然明白。我上面所说的所有问题,真的不是因为人家起步早,有技术积累,我们追赶不上导致的,就是因为没有用心。我相信阿里云技术实力真的很强,是国内云服务的老大。网上也有很多技术文章分享阿里云在历年双十一中的技术升级,跨越的一个又一个挑战。云栖社区上这篇文章也讲了在刚刚过去的2019年双十一中阿里云的优秀表现。文章提到他们的CTO说了这么一句话:“不是任何一朵云都能撑住这个流量。中国有两朵云,一朵是阿里云,一朵叫其他云。”。阿里云是很不错,但这么自夸真的是有点太飘了,飘到云上去了。要我说,世界上有两朵云,一朵是AWS,一朵叫其他云。我这么说没有“国外的月亮比较圆”的意思,真的希望我们国家土生土长的云能好好打磨打磨。我多希望我们国家能有世界一流的云服务啊,阿里云,加油吧!