iOS 13 适配TabBar红点偏移、UISearchBar显示问题

%title插图%num

iOS 13 如期而至,虽然正式版还没出来,但是适配工作可以开展起来啦。在适配 iOS 13 过程中,遇到了如下一些问题。

1. UITextField 的私有属性 _placeholderLabel 被禁止访问了

遇到的*个崩溃是修改UITextFieldplaceholder的颜色,历史遗留代码如下:

  1. [_textField setValue:self.placeholderColor forKeyPath:@“_placeholderLabel.textColor”];

收到的错误信息⚠️

  1. ‘Access to UITextField’s _placeholderLabel ivar is prohibited. This is an application bug

那么这个问题如何处理呢?

其实,UITextField有个attributedPlaceholder的属性,我们可以自定义这个富文本来达到我们需要的结果。

修改如下:

  1. NSMutableAttributedString *placeholderString = [[NSMutableAttributedString alloc] initWithString:placeholder attributes:@{NSForegroundColorAttributeName : self.placeholderColor}];
  2. _textField.attributedPlaceholder = placeholderString;

注意⚠️,iOS 13 通过 KVC 方式修改私有属性,有 Crush 风险,谨慎使用!

2. 控制器的 modalPresentationStyle 默认值变了

对于这个变化,有点措手不及,直接修改了模态窗口的交互。
查阅了下 UIModalPresentationStyle枚举定义,赫然发现iOS 13新加了一个枚举值:

  1. typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {
  2. UIModalPresentationFullScreen = 0,
  3. UIModalPresentationPageSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
  4. UIModalPresentationFormSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),
  5. UIModalPresentationCurrentContext API_AVAILABLE(ios(3.2)),
  6. UIModalPresentationCustom API_AVAILABLE(ios(7.0)),
  7. UIModalPresentationOverFullScreen API_AVAILABLE(ios(8.0)),
  8. UIModalPresentationOverCurrentContext API_AVAILABLE(ios(8.0)),
  9. UIModalPresentationPopover API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(tvos),
  10. UIModalPresentationBlurOverFullScreen API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios) API_UNAVAILABLE(watchos),
  11. UIModalPresentationNone API_AVAILABLE(ios(7.0)) = -1,
  12. UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,
  13. };

是的,就是UIModalPresentationAutomatic,苹果居然直接将modalPresentationStyle默认值改成这个,有点不解,难道是怕我们不知道新加了这个交互?这个也完全违反了开闭原则吧?。

如何修改:
如果你完全接受苹果的这个默认效果,那就不需要去修改任何代码。
如果,你原来就比较细心,已经设置了modalPresentationStyle的值,那你也不会有这个影响。
对于想要找回原来默认交互的同学,直接设置如下即可:

  1. self.modalPresentationStyle = UIModalPresentationOverFullScreen;

注意:UIModalPresentationOverFullScreen*低支持iOS 8,如果你还要支持iOS 8以下版本,那么你可以用UIModalPresentationFullScreen,这个两个值的交互略有些细微差别,具体的可以自己看下效果。

3. MPMoviePlayerController 在iOS 13已经不能用了

在使用到MPMoviePlayerController的地方,直接抛了异常:

  1. ‘MPMoviePlayerController is no longer available. Use AVPlayerViewController in AVKit.

如何修改:
这个没啥好说的,既然不能再用了,那只能换掉了。替代方案就是AVKit里面的那套播放器。

4. iOS 13 DeviceToken有变化‼️

这个很重要⚠️
可能大多数使用第三方推送的童鞋都不会注意到这个问题,一般现在的第三方推送都是将DeviceToken原始数据丢进去,具体的解析都是第三方内部处理,所以,这些第三方解析DeviceToken的方式正确的话,那就毫无问题。如果你们是通过这种方式来获取DeviceToken,那你需要注意了。(这个坑也是多年前埋下的,很多文章介绍的也是下面这个方法,不规范的做法迟早要还的?),如下:

  1. NSString *dt = [deviceToken description];
  2. dt = [dt stringByReplacingOccurrencesOfString: @“<“ withString: @“”];
  3. dt = [dt stringByReplacingOccurrencesOfString: @“>” withString: @“”];
  4. dt = [dt stringByReplacingOccurrencesOfString: @” “ withString: @“”];

这段代码运行在 iOS 13 上已经无法获取到准确的DeviceToken字符串了,iOS 13 通过[deviceToken description]获取到的内容已经变了。

{length = 32, bytes = 0x778a7995 29f32fb6 74ba8167 b6bddb4e … b4d6b95f 65ac4587 }

可以看到,跟原来我们认识的那个已经完全不一样了。其实,造成这样的问题,主要还是没有使用正确的方式来操作,下面是解决办法:

  1. NSMutableString *deviceTokenString = [NSMutableString string];
  2. const char *bytes = deviceToken.bytes;
  3. NSInteger count = deviceToken.length;
  4. for (int i = 0; i < count; i++) {
  5. [deviceTokenString appendFormat:@”%02x”, bytes[i]&0x000000FF];
  6. }

或者你也可以使用*光提供的方法(2019年7月24日更新)

  1. (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
  2. {
  3. if (![deviceToken isKindOfClass:[NSData class]]) return;
  4. const unsigned *tokenBytes = [deviceToken bytes];
  5. NSString *hexToken = [NSString stringWithFormat:@”%08x%08x%08x%08x%08x%08x%08x%08x”,
  6. ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
  7. ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
  8. ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
  9. NSLog(@“deviceToken:%@”,hexToken);
  10. }

5.Sign in with Apple (提供第三方登录的注意啦⚠️)

如果你的应用使用了第三方登录,那么你可能也需要加下 「Sign in with Apple」?

Sign In with Apple will be available for beta testing this summer. It will be required as an option for users in apps that support third-party sign-in when it is commercially available later this year.

怎么做呢?网上已经有很多demo了,此处就不展开啦。

6.即将废弃的 LaunchImage

从 iOS 8 的时候,苹果就引入了 LaunchScreen,我们可以设置 LaunchScreen来作为启动页。当然,现在你还可以使用LaunchImage来设置启动图。不过使用LaunchImage的话,要求我们必须提供各种屏幕尺寸的启动图,来适配各种设备,随着苹果设备尺寸越来越多,这种方式显然不够 Flexible。而使用 LaunchScreen的话,情况会变的很简单, LaunchScreen是支持AutoLayout+SizeClass的,所以适配各种屏幕都不在话下。
注意啦⚠️,从2020年4月开始,所有使⽤ iOS13 SDK的 App将必须提供 LaunchScreenLaunchImage即将退出历史舞台。

7. Dark Mode

Apps on iOS 13 are expected to support dark mode
Use system colors and materials
Create your own dynamic colors and images Leverage flexible infrastructure

 

私有KVC

iOS不允许valueForKeysetValue: forKey获取和设置私有属性,需要使用其它方式修改

如:

  1. [textField setValue:[UIColor red] forKeyPath:@“_placeholderLabel.textColor”];
  2. //替换为
  3. textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@“输入”attributes:@{NSForegroundColorAttributeName: [UIColor red]}];

UISearchBar显示问题

TextField

升级到iOS13,UISearchController上的SearchBar显示异常,查看后发现对应的高度只有1px,目前没找到具体导致的原因,解决办法是使用KVO监听frame值变化后设置去应该显示的高度

黑线处理crash

之前为了处理搜索框的黑线问题会遍历后删除UISearchBarBackground,在iOS13会导致UI渲染失败crash;解决办法是设置UISearchBarBackground的layer.contents为nil

  1. public func clearBlackLine() {
  2. for view in self.subviews.last!.subviews {
  3. if view.isKind(of: NSClassFromString(“UISearchBarBackground”)!) {
  4. view.backgroundColor = UIColor.white
  5. view.layer.contents = nil
  6. break
  7. }
  8. }
  9. }

TabBar红点偏移

如果之前有通过TabBar上图片位置来设置红点位置,在iOS13上会发现显示位置都在*左边去了。遍历UITabBarButtonsubViews发现只有在TabBar选中状态下才能取到UITabBarSwappableImageView,解决办法是修改为通过UITabBarButton的位置来设置红点的frame

https://www.jianshu.com/p/4654f8f6e16e

python爬虫,嗅事百科(段子爬取)

python爬虫,嗅事百科(段子爬取)

coding=utf-8
“””
author:lei
function:
“””

import requests
from lxml import etree
import json

class QiuShi(object):

def __init__(self):
self.url = “https://www.qiushibaike.com/text/”
self.headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36”, “Referer”: “https://www.qiushibaike.com/”}

def get_data(self, url):
return requests.get(url).content.decode()

def get_content(self, url):
response = self.get_data(url)
html = etree.HTML(response)

content = html.xpath(“//div[@class=’content’]/text()”)

return content

def parse_data(self, response):
html = etree.HTML(response)

el_list = html.xpath(“//div[@class=’article block untagged mb15 typs_hot’]”)
print(len(el_list))

temp_list = []
for el in el_list:
temp = {}
temp[“author”] = el.xpath(“./div[1]/a[2]/h2/text()”)[0].strip(“\n”)
temp[“href”] = “https://www.qiushibaike.com” + el.xpath(“./a[1]/@href”)[0]
temp[“content”] = self.get_content(temp[“href”])
temp[“smile_num”] = el.xpath(“./div[2]/span[1]/i/text()”)[0]
temp[“comment_num”] = el.xpath(“./div[2]/span[2]/a/i/text()”)[0]
# print(temp)
temp_list.append(temp)

try:
next_url = “https://www.qiushibaike.com” + html.xpath(“//span[@class=’next’]/../../a/@href”)[0]
except:
next_url = None

return temp_list, next_url

def save_data(self, temp_list):
with open(“qiushi.json”, “a”, encoding=”utf-8″) as f:
f.write(json.dumps(temp_list, ensure_ascii=False))
print(“保存成功!”)
print(temp_list)

def run(self):
next_url = self.url

while next_url:
response = self.get_data(next_url)
temp_list, next_url = self.parse_data(response)
self.save_data(temp_list)

if name == ‘main’:
qiushi = QiuShi()
qiushi.run()

数据科学导论——数据可视化

数据科学导论——数据可视化

第2关:初识数据

import pandas as pd
import numpy as np
pd.set_option(‘display.max_columns’, 1000)
pd.set_option(‘display.width’, 1000)
pd.set_option(‘display.max_colwidth’, 1000)
def student():

# ********* Begin *********#
df=pd.read_csv(“Task2/listings.csv”)
print(df.head(5))

# ********* End *********#

第3关:柱状图

import matplotlib
matplotlib.use(“Agg”)
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
def student():

# ********* Begin *********#
df=pd.read_csv(“Task3/listings.csv”)
plt.figure(figsize=(10,10))
sns.countplot(x = ‘room_type’,
data = df,
order = df[‘room_type’].value_counts(ascending=False).index)
plt.xticks(rotation=90)
plt.savefig(“Task3/img/T1.png”)
plt.show()

# ********* End *********#

第4关:散点图

import matplotlib
matplotlib.use(“Agg”)
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
def student():

# ********* Begin *********#
df=pd.read_csv(“Task4/listings.csv”)
plt.figure(figsize=(10,10))
sns.scatterplot(x=”longitude”,
y=”latitude”,
s=10,
data=df)
plt.savefig(“Task4/img/T1.png”)
plt.show()

# ********* End *********#

第5关:直方图

import matplotlib
matplotlib.use(“Agg”)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings(‘ignore’)
def student(data,x,y):
”’
根据输入数据将直方图与线形图绘制在同一面板中
:param data: 绘制直方图数据,类型为list
:param x,y: 绘制线形图数据,类型为list
:return: None
”’
# ********* Begin *********#
fig = plt.figure(figsize=(10, 10))
sns.distplot(data,kde=False)
sns.lineplot(x,y)
plt.savefig(“Task5/img/T1.png”)

python之文件操作

python之文件操作
本模块讲解了:
1 获取电脑系统名称
2 获取电脑cpu个数
3 获取电脑文件的*对路径
4 os库的相关使用
4.1 创建目录
4.2 递归创建多级目录
4.3 删除目录
4.4 递归删除多级目录
4.5 文件重命名

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
# 获取cpu的个数,cpu个数越多,运行速度越快,
# 根据cpu的个数来决定创建几个进程更加合适
count = os.cpu_count()
print(f’cpu的个数为:{count}’)

# 获取当前文件的所在路径
cwd = os.getcwd()
print(f’当前文件的所在路径为:{cwd}’)

# 获取本电脑的操作系统名称
name = os.name
print(f’此电脑的操作系统名称为:{name}’)

# 返回该文件的*对路径
result = os.path.abspath(’01 文件操作.py’)
print(result)
“””
*对路径:带盘符,例如C盘,D盘等等
相对路径:不带盘符,例如 ./表示当前目录下
“””

# 获取路径的*后一部分
result = os.path.basename(r’C:\Users\LIJIE\Desktop\联科数据\联科数据21-03-29\*周\03 第三天\01 文件操作.py’)
print(result)

# 获取路径的公共部分
result = os.path.commonpath([‘C:/a/b’,’C:/a/c’,’C:/a/d’,])
print(result)

# os对文件的相关操作
# 创建单个目录
# os.mkdir(‘新建文件夹’)
# 递归创建目录
# os.makedirs(‘111/222/333’)

# 删除目录,只能删除空目录,否则会报错
# os.rmdir(‘新建文件夹’)

# 删除已经创建的333目录(文件夹)
# os.rmdir(‘111/222/333’)

# 删除多级目录
# os.removedirs(‘111/222’)

# 文件重命名
# os.rename(‘新建文件夹’,’文件夹1′)
# 删除掉文件夹1
# os.rmdir(‘文件夹1’)

# 获取目录列表
os.listdir()

 

openstack云平台构建方案

一、现有资源和需求说明
(1)服务器数量 8 台。没有专用存储设备。 (2)考虑后期的高可用。

二、openstack 逻辑架构方案
2.1 openstack 组件逻辑关系图(非 HA 结构)
云平台整体架构

%title插图%num

部署方案:
控制节点:鉴权服务、镜像管理、消息队列、数据库、计算调度、存储调度、
网络服务和云管理控制台。
计算节点:计算服务、libvirt 服务、KVM 虚拟机和网络代理。
存储节点:存储服务、lvm 或 ceph。

高可用方案:
实际生产环境必须考虑控制节点的高可用,本架构中用 2 台控制节点实现高可用,两台控制节点 额外需要部署的服务如下:

%title插图%num

控制节点 1 控制节点 2
Haproxy (Active) Haproxy (Standby)
Pacemaker cluster Pacemaker cluster
MySQL Galera MySQL Galera
2.2 网络部署图

%title插图%num

上图为网络物理拓扑结构。
网络架构永远是 iaas 平台中*为复杂的一部分。鉴于租户对本平台使用需求简单,暂不支持租户 可以自主创建和管理属于自己的多个租户子网。所以网络架构选择易于实现和管理的 provider 网络 类型。vm 网络逻辑拓扑图如下:

%title插图%num

三、openstack 部署涉及的组件列表

%title插图%num
角色 数量 作用 必备服务
控制 节点 2台 负责对其 余节点的 控制 基础服务:
(1)时间同步服务NTP(2)数据库mariadb (3)消息队列rabbitMQ (4)缓存服务 memcached(5)键值系统 etcd(6)负载均衡器 Haproxy(7)集群管理 Pacemaker

核心服务:
(1)认证服务 Keystone (2)镜像管理 Glance (3)网络服务 Neutron-server(4)控制台 Horizon(5)计算调度服务 Nova-scheduler
计算 节点 /存 储节点 6台 负责虚拟 机的运行 (1) 集群管理 pacemaker remote (2)计算服务 Nova-compute (3) 网络服务 Neutron-linuxbridge (4)存储服务 Cinder
对上述列表的说明
说明 1:存储节点和计算节点复用
当前将存储服务和计算服务部署在相同节点。后期有独立存储时,可以将存储节点独立出来,实 现计算节点的“无状态”。
说明 2:网络节点、镜像节点部署在控制节点。

四、部署方|式和参考链接
部署方式:手动部署 部署参考:https://docs.openstack.org/install-guide/
————————————————

原文链接:https://blog.csdn.net/weixin_38669561/article/details/100047847

微信的指纹支付能否开通是厂商还是微信说了算?

*近逛锤子论坛发现居然有教学 【通过 Tasker (非 root )方式解决微信指纹支付支付】,好奇搜了下,不能微信指纹支付的安卓手机还挺多,包括华为、小米。

之前 iPhone 越狱发现需要flyJB这类插件屏蔽越狱检测才能开启指纹支付、扫脸这些,这能理解。 但是支持指纹识别的 Android 手机,没有 Root,微信居然也不让用指纹,在这上面微信居然还有话语权?它是靠什么判断的?

 

64 条回复    2021-04-06 09:19:28 +08:00
codehz
    1

codehz   95 天前 via Android   ❤️ 1

需要厂商放根证书,然后在每个 app 上都开一个 Soter Service
kindjeff
    2

kindjeff   95 天前   ❤️ 24

众所周知腾讯游戏在 Android 上跑的帧率的高低也不由厂商的硬件性能决定而是由腾讯决定
wgbx
    3

wgbx   95 天前

看谁影响用户的力大,代码获取设备型号也挺简单的吧?
imdong
    4

imdong   95 天前

一边厂商设备要跑高帧率要通过交税来提高,一方面应用商店游戏提成 50%。

赤果果的互相伤害,可是鹬蚌相争,伤及渔夫。

zxcslove
    5

zxcslove   95 天前

腾讯不讲究,要拿指纹数据吧。如果是手机支持,那么每个录入的指纹都可以,微信的那就必须是微信录入的那一个才能用。
zxcslove
    6

zxcslove   95 天前

很多银行 app 都是所有录入指纹都能用的,为啥腾讯高人一等,不要脸。
vk42
    7

vk42   95 天前

关键在接口,原生 Android 里面 Google 搞了一套 biometric API,但是国内厂商自己又单独搞了一套。手里的 Pixel 用国外 app 指纹没有任何问题,国内 app 一个都不行……
tanranran
    8

tanranran   95 天前   ❤️ 2

腾讯的指纹标准

https://github.com/Tencent/soter

TENCENT SOTER 是腾讯于 2015 年开始制定的生物认证平台与标准,通过与厂商合作,目前已经在一百余款、数亿部 Android 设备上得到支持,并且这个数字还在快速增长。

目前,TENCENT SOTER 已经在微信指纹支付、微信公众号 /小程序指纹授权接口等场景使用,并得到了验证。

接入 TENCENT SOTER,你可以在不获取用户指纹图案的前提下,在 Android 设备上实现可信的指纹认证,获得与微信指纹支付一致的安全快捷认证体验。

tanranran
    9

tanranran   95 天前

@tanranran #8 需要厂商配合微信,而不是微信配合厂商
wangbenjun5
    10

wangbenjun5   95 天前

我感觉这块搞点有点复杂,指纹模块应该是一种硬件,大概类似于摄像头模块,只要符合摄像头相关接口的标准就可以调用

比如说手机用前置摄像头解锁或者面容支付,那我作为 App 开发者,只需要调用摄像头获取相机拍照的结果就行了,为什么还要关心用的是哪家摄像头呢?

强行把硬件和软件标准耦合在一起只会更麻烦,毕竟安卓是一个开放平台,又不是 ios 苹果一个人说了算,总之,腾讯垃圾

a5b6c7d8
    11

a5b6c7d8   95 天前 via Android

非得用腾讯产品?
miyuki
    12

miyuki   95 天前 via iPhone

一加也是,从 7 系列开始,只要解锁 bl 就没法用微信的指纹了,支付宝不影响
Maskeney
    13

Maskeney   95 天前

那当然是沆瀣一气,用户悲惨
john6lq
    14

john6lq   95 天前

@miyuki 这个无可厚非,关键啥都没干它也不支持,这就逼着厂商去跟他们对接。
mmdsun
    15

mmdsun   95 天前 via Android

@miyuki xposed 框架有个插件可以强制开指纹。
john6lq
    16

john6lq   95 天前

@a5b6c7d8 就事论事而已。真要说,用微信支付基本是被逼的,还是支付宝用的多。
john6lq
    17

john6lq   95 天前

@tanranran 果然。看了一下,腾讯说它是基于 Android 提供的接口进行的加密封装,并且”只是针对这些接口和厂商进行合作,进行了很强的安全加固”,我看就是加了个服务器校验以及可以拿到用户是用哪个手指进行的操作。这不就是流氓嘛,还是为了拿数据。而且居然国内几乎所有厂商都接入了。
love
    18

love   95 天前 via Android

还有这回事啊,可是我的小米是可以微信指纹的
treblex
    19

treblex   95 天前

没办法,毕竟钱要被盗刷了 手机厂商也不可能给赔,只能做做风险控制
czk1997
    20

czk1997   95 天前 via Android   ❤️ 3

微信说了算的。Android 都有现成的 API,但是腾讯和阿里又自己搞了一套。美行手机拿到国行就用不了(比如三星),硬件基本是一致的。银行 app 都可以用指纹,就这俩用不了。纯属有病。
eGlhb2Jhb2Jhbw
    21

eGlhb2Jhb2Jhbw   95 天前

还是安卓碎片化太严重了,谁能确保某些垃圾系统的安全性。忘了是哪个厂家了,刚做屏下指纹的时候,随便根火腿肠都能刷开。
norz
    22

norz   95 天前

指纹行业相关
lry
    23

lry   95 天前

之前菊花和企鹅指纹闹掰,传闻是企鹅想要菊花把指纹数据上传到企鹅服务器
*近菊花和企鹅游戏闹掰,也有传闻是企鹅是想要拿菊花用户的人脸识别数据
580a388da131
    24

580a388da131   95 天前

安卓上微信说了算 安卓那环境确实不安全 不信任腾讯纯粹是他们自己作孽太多
fanfpy
    25

fanfpy   95 天前

米九 se 解锁 bl 支付宝可以指纹支付,微信不可以
norz
    26

norz   95 天前   ❤️ 11

@norz 科普一下吧
先说结论,主要还是厂商做的选择
安全支付首先得知道两个大环境,REE 和 TEE,REE 是指 Real Execution Environment 真实执行环境,TEE 是指 Trust Execution Environment 可信执行环境。如果一个手机要支持指纹支付,就必须要有 TEE,TEE 可以简单的理解为绑定在某个独立 CPU 上,并且单独划分了独立的内存区域,不与 REE 有任何硬件共享的小型操作系统,Android 是不会提供的这方面支持的,而且也不是免费的。买高通套件,高通自带 QSEE (高通自己开发的 TEE ),如果是 MTK,那你就得自己去找 TEE 提供商买服务,主流是 Trustonic 、豆荚、瓶钵、trusty,这些都是厂商花钱才行,具体多少钱,反正也是按设备数收取的。
有了 TEE 环境,才轮到上面说的 SOTER,SOTER 本身标准出台也比支付宝的 IFAA 晚,所以有一些早期机型,由于 TEE 提供商未能集成 SOTER,导致不能支持微信支付。
去搜索了一下,可以看看这个 https://cloud.tencent.com/developer/article/1043485
据我所知,只是需要去支付宝和微信申请一下,拿到开发文档和测试 APK,都是免费的。只是对于厂商来说,都是麻烦事儿,多了测试流程,还要改产线。
kokutou
    27

kokutou   95 天前 via Android   ❤️ 1

米 10 解锁 bl 刷了 eu 版 rom
微信指纹没问题。我之前的米 8,米 9 刷了 eu 都没问题。
米 9 后来的魔趣 rom 也解决了微信指纹。lineageos 之类的 rom 微信指纹就不要想了。

美团,支付宝都能用 lineageos 这种原生 rom 的指纹接口,就 tm 微信不行。

但是微信上骗子*多,微信上钱被骗了 100%追不回来。
微信号说封就封。
腾讯人工服务永远找不到。

这就是 tm 的腾讯。

norz
    28

norz   95 天前   ❤️ 3

@norz
另外对于出海外的机器,TEE 还得支持 FIDO,这个是 VISA/MASTER 支付的要求,也是 Google 的测试项。
对于指纹或者人脸识别厂商来说,FIDO/IFAA/SOTER 其实都是在 TEE 中增加了自己的 TA ( Trust Application ),然后指纹厂商提供自己的 TA,当得到结果后,通过 TEE 内部的 TA 间交互接口将识别结果传递过去而已。所以楼上说微信、支付宝能拿个人数据的,也不可信。
px1396
    29

px1396   95 天前

@vk42 招行的 App 可以
norz
    30

norz   95 天前

@norz
至于楼上提到各种 rom 对于指纹支持的问题,要么是 rom 提供的 trustzone.img 或者 tee.img 不支持 soter,要么就是 rom 提供的 keymaster/keystore 是修改过的,因此无需 TEE 环境提供校验。前者可能性更大,但是从技术手段上来说,root 了一切都可行,第二种虽然风险高,但是一劳永逸…
Infinite2K
    31

Infinite2K   95 天前

@miyuki 这么狠,我的 7pro 当初首发没解锁 bl,之后一直想解锁但是数据太多不敢动,你这么一说我更不好解锁了
ntgeralt
    32

ntgeralt   95 天前

很明显,是微信评测你手机指纹综合素质后决定是否下放
fline
    33

fline   95 天前

党领导一切
passerbytiny
    34

passerbytiny   94 天前 via Android

*终决定权当然是微信,就比如你买东西能不能刷卡也是商家说了算(只不过有了 POS 机就必须能刷卡,因为给不给 POS 机是人行 /银监会说了算)。

当然看楼上的情况,微信就干了“装了 POS 机却只让刷部分卡”的事。

zsyld
    35

zsyld   94 天前

任何将生物信息传到服务器的厂商都是垃圾
HankAviator
    36

HankAviator   94 天前

@vk42 种种原因手机机型改成了 Pixel,用改机型的模块给微信返回个热门国产手机,指纹就可以用了,例如米 6
wy315700
    37

wy315700   94 天前 via iPhone

@norz 整个楼只有你是在分析技术 然而好像并没有人看
john6lq
    38

john6lq   94 天前 via iPhone

@wy315700 我觉得说服不了我,厂商还是要与微信对接,照这样下去,字节搞一个,美团搞一个,各个银行搞一个,做手机的不得疯了?这不扯犊子呢?人家国外咋没这么多幺蛾子?
john6lq
    39

john6lq   94 天前 via iPhone

@codehz 之前不了解,回头一看,发现一楼其实是“扫地僧”,只不过没有评价而已。瑞思拜。
hhyygg
    40

hhyygg   94 天前 via Android

学习了,真有意思
HankAviator
    41

HankAviator   94 天前   ❤️ 1

@norz “Android 是不会提供的这方面支持的,而且也不是免费的。”
Trusty 怎么就收费了呢?安卓官方:“资金成本加上不可靠的第三方系统会导致 Android 生态系统不稳定。我们将 Trusty 作为一种可靠且免费的开源替代方案提供给合作伙伴,用于替代其可信执行环境。Trusty 可提供通过封闭源代码系统无法实现的透明性。”
https://source.android.com/security/trusty
alfchin
    42

alfchin   94 天前 via iPhone

@HankAviator 我个人认为,不可 OTA 的东西开源才是*大的不安全因素。大幅度降低了针对性攻击的难度。
admingyu
    43

admingyu   94 天前   ❤️ 1

楼上一些回复看着真是…

如果像是摄像头一样,可以获取用户的脸部,自己对比校验是很方便听上去很好,

那是不是说 APP 就可以以指纹验证的理由,获取用户指纹原始数据?,那这个数据泄露了(或者说故意)拿去干一些违法的事情,这个后果谁来承担呢?人脸识别盗刷的事情还少吗

如果有厂商能制定一套值得信任的接口,APP 只能调用这个接口,只能拿到指纹校验的结果,对于用户来说,安全性能不比你自己拿用户的指纹原始数据做事情更高?

开发者不要总想着怎么方便怎么来,要有责任感

jjpprrrr
    44

jjpprrrr   94 天前

@kokutou #27 别的设备不知道,米 8 的 lineageos 微信、支付宝指纹应该是都没问题的。我是 PE 的 sdm845 设备维护者,跟 lineage 的 sdm845 维护者 Bruno 也经常同步代码……
HankAviator
    45

HankAviator   94 天前

@alfchin 密码算法的原理也都是公开的。金库就在那里,重赏之下必有勇夫。
不开源的东西发现和处理漏洞只会比开源的早,危害也会比开源的大。前者只是“看不到就不存在”和“不解决问题,解决会发现问题的方法”的消*做法罢了。
12101111
    46

12101111   94 天前

@norz TEE 是 security monitor 虚拟化执行的操作系统吧, 我看有一些早期的 CPU 的 TEE 和 bootloader 有 bug,可以直接提权到 el2/el3 上
kokutou
    47

kokutou   94 天前

@jjpprrrr #44
米 8 用 lineageos 很久之前了…中间还经过了米 9…现在是米 10米 10 咋回事啊, 感觉都没人做包…
alfchin
    48

alfchin   94 天前 via iPhone

@HankAviator 系统层的漏洞才是问题的源头,而不是密码算法。而且*近十年的实践中,开源软件的漏洞不比闭源软件少。
对于部署就无法更改的系统,*安全的做法是尽可能不暴露任何非必要细节,而不是满大街公开,然后被一击必杀。
norz
    49

norz   94 天前

@HankAviator 嗯,你说的没错,Android 确实提供了 Trusty 的方案,但是并不提供支持。目前国内方案只有展讯在使用 Trusty 就很能说明问题。
norz
    50

norz   94 天前

@12101111 破解、后门之类的我了解得不多,不过就数据流来说,除非生物识别设备的提供商、方案或者 TEE 有意设计后门接口,不然不可能直接拿到指纹或者人脸数据。
bclerdx
    51

bclerdx   94 天前 via Android

@czk1997 对啊,银行都用 google API 。难道银行的数据不是为了安全。就腾讯和阿里特别。
HankAviator
    52

HankAviator   94 天前

@norz 国内我接触的客户都有意无意在脱离国际知名的优秀产品,说到底也不是纯技术问题。
nomemo
    53

nomemo   94 天前

作为 iOS 用户弱弱问一句你们在讨论的啥??
ttys001
    54

ttys001   94 天前

这……都 2021 年了,有些安卓还不能指纹 /扫脸支付,每次还都要输密码?
php8
    55

php8   94 天前 via Android

华为微信是支持指纹支付的
yuhaijiang2019
    56

yuhaijiang2019   94 天前

这几年一直 lg 和 pixel 的洋垃圾,从来没体验过指纹支付
hs0000t
    57

hs0000t   94 天前

自从用过某个返回键和指纹放在一个实体按钮的手机,就再也没开过指纹支付
tianyamomo
    58

tianyamomo   93 天前

@zxcslove 貌似所有的应用都是拿不到指纹数据的,他拿到的只是一个验证结果
systemcall
    59

systemcall   93 天前

它是靠手机厂家愿不愿意听话判断的,够听话就给加
bullfrog
    60

bullfrog   93 天前

ios 用户表示已经手输密码 1 年了
no1xsyzy
    61

no1xsyzy   93 天前

@vk42 试试招行,我索尼港版系统可以
vk42
    62

vk42   93 天前

@HankAviator 你用的 Pixel 几代?据我所知至少 Pixel 3 之前用微信 /支付宝指纹方案都是要上 Xposed 或 Riru,山寨一个通过指纹自动输入密码的方式。毕竟海外版本手机基本都只有 FIDO,改个机型也改不出来 SOTER 啊……
realpg
    63

realpg   93 天前

小米不能微信指纹支付?我打出了一个大大的问号
sky96111
    64

sky96111   3 天前 via Android

@norz 纠正一下,Google 的 Trusty 不是开源免费的吗?
https://source.android.google.cn/security/trusty?hl=zh-cn

云计算和虚拟化,有啥区别呢?

sjmcefc2 · 131 天前 · 2364 次点击
这是一个创建于 131 天前的主题,其中的信息可能已经有所发展或是发生改变。
没搞清楚什么是云计算和虚拟化的联系和区别?有人可以通俗讲清楚不?
还想求一个便宜的腾讯云、华为云购买链接
虚拟化 云计算 区别 清楚23 条回复 • 2020-12-09 16:04:23 +08:00
DoctorCat 1
DoctorCat 131 天前
云计算:商业概念(类比路上跑的四轮汽车)
虚拟化:实现云计算概念过程中的一种技术基础(类比四轮汽车中的燃油车)

总结: 虚拟化(四轮燃油车)曾经是 云计算(四轮汽车)的基础技术。
现在已经衍生出其他的技术了,例如容器和云原生(老年代步车、新能源车)等技术。
freecloud 2
freecloud 131 天前
虚拟化是云计算的基础。集群资源池(集群 cpu 、集群 gpu 、集群 RAN 、集群存储,集群资源,高带宽接入等等)+跑个资源控制与虚拟化软件,生出的小机,是为云主机。一个独立服务器,跑个虚拟化软件,生出的小机,是为 VPS 。

个人观点,仅供参考。
sjmcefc2 3
sjmcefc2 131 天前
@DoctorCat 虚拟化是单指 vm 的技术?容器感觉还是比较单一的一个技术(或者更多的相关的管理操作变成复杂的系统),感觉云原生都是生态了?
sjmcefc2 4
sjmcefc2 131 天前
集群资源,比如众多 pc 服务器的 cpu 集群,是否可以达到很强大的计算功能呢?
DoctorCat 5
DoctorCat 131 天前
@sjmcefc2 传统意义上的虚拟化,就是虚拟机呀 xen 、kvm 、vmware 这类的主流(大众认知,在此不讨论学术意义)。
容器技术其实很早就有了 Linux kernel2.6 后,BSD 的 Jail 等,只是很长时间都没有公开的商业实践罢了。云原生也是技术理念变革了例如 软件定义 X 的普及,在架构灵活性上有质的变化,算是生态吧。
JohnSnow 6
JohnSnow 131 天前 via iPhone
宽泛讲,云计算是虚拟化的实际应用。虚拟化主要是将硬件资源抽象起来进行共享,达到资源池化。比方说计算资源抽象、存储资源抽象等。

具体讲技术时,一般还是计算资源方面。

1. 虚拟化一般特指内核虚拟化技术 kvm 。现在云计算的虚拟机服务大多数基于 qemu/kvm 。这种 kvm 虚拟化是硬件辅助虚拟化,主流 CPU 都支持。因为模拟的是操作系统完整的环境,开销一般会比容器化的大,但隔离性上好。大部分厂商的云计算,提供虚拟机服务时,主要就是这个东西。

2.容器化是进程级别虚拟化,一般是依赖于内核 namespace (修改进程视图,让进程以为自己是独占资源)和 cgroups 技术(简单认为保证 QoS )。以 docker 为例,内核提供 namespace 、cgroups 支持,另外文件系统上 overlayfs 等联合文件系统的技术,解决分发问题。只模拟一个或者一组进程的上下文(宿主机上所有容器共享一套内核)资源开销上小些,但隔离性上差。

可以简单理解为,1 跟 2 是虚拟化程度上差异。实际上,在边缘计算领域已经有基于 kvm 虚拟化技术的容器了。

云原生一般是以 k8s 为基底的生态。
sjmcefc2 7
sjmcefc2 131 天前
@DoctorCat 大众认知就是很好的知识。有没有这方面的演变路线图?另外云计算是商业概念的话具体指什么呢。
sjmcefc2 8
sjmcefc2 131 天前
@JohnSnow 虚拟化这块,比如 exsi,一般都是把主机切分掉,还没有试过把硬盘等资源做成资源池;
1.也就是云主机,目前都是 kvm 的主机;隔离性强是指独自使用内存,cpu 等资源,彼此之间看不到别人在运行的数据?

2.容器化是不是就有可能看到彼此之间的数据呢
3.云原声,以 k8s 为基底是不是就是一套新的理念来分配和整理资源?
DoctorCat 9
DoctorCat 131 天前
@sjmcefc2 关键词“云计算历史” 随便找就有很多资料了 例如 https://cloud.51cto.com/art/201904/594748.htm
laminux29 10
laminux29 131 天前
云计算有很多种意思,简单一点就是使用服务器运行程序,通俗一点就是你花钱把服务器到域名这一整套东西交给专门的厂商解决,学术一点还牵涉到需求与资源的分化与汇总。

虚拟化也有很多种意思,简单通俗来说就是一台物理机模拟出好几台虚拟机,学术一点就是把资源整合然后根据需求进行调度并调优。

murmur 11
murmur 131 天前
这东西就是个概念,不用纠结,你会发现除了云计算还有雾计算,有了雾计算还有霾计算
wanguorui123 12
wanguorui123 131 天前
虚拟化是个大概念,云计算只是虚拟化的应用场景之一
sjmcefc2 13
sjmcefc2 131 天前
@murmur 也不是纠结,主要是概念有点糊涂。
sjmcefc2 14
sjmcefc2 131 天前
@wanguorui123 虚拟化的其他场景是什么呢?
总感觉越想越糊涂这其中的差别。
opengps 15
opengps 131 天前
首次买可以跟我聊聊
入门的解释:你可以把某个系统里的多个网站理解成空间,本机虚拟机理解成 VPS 。
现在更进一步:虚拟化是较小规模的虚拟机集群,云计算是较大规模的虚拟机集群,从这一步开始,有个共同特点就是脱离了单台物理机。所以开始用云这种词来形容,你虽然作为用户用了某台或者某些虚拟机,但是及时不中断业务,那么不同时间很可能实际用了不同的物理机。虚拟化或者云计算层面给你做了物理机的底层故障热迁移
wanguorui123 16
wanguorui123 131 天前
@sjmcefc2
虚拟化可以是对计算能力,存储,进程,操作系统等等的模拟环境,虚拟化的目的是共享底层资源( CPU/内存 /硬盘 /网络等等),以及虚拟化可以方便的迁移软件环境和管理硬件资源。
云计算只是虚拟化技术进行商用化的一个分支。
JohnSnow 17
JohnSnow 131 天前 via iPhone
@sjmcefc2 你说的这个虚拟化,首先不是宽泛意义上(或者说计算机特别是操作系统里硬件抽象的概念),而是具体技术的应用。计算机里的虚拟化有很多,比方说服务器层面虚拟化( kvm 等),应用层面,网络层面( sdn ),存储层面( sds )。你说的 exsi 这种主要虚拟化把主机切掉,是一类 type 1 hypervisor,type 1 这种 hypervisor 直接放到裸金属的服务器上; type 2 hypervisor 跟 hardware 中间还有层 host os,也就是宿主机。

隔离性差不是说你就可以随随便便看到数据,只是跟虚拟机比要相对容易些(所以安全策略的实现跟应用上,厂商要做更多设计考虑)。cpu 、内存都是共享的,不管什么类型,你虚拟机或者容器在宿主机内核看来还是个进程而已。进程是内核分配资源的单位,所以该怎么样就怎么样。可以简单理解 qemu/kvm 虚拟机成带有 cpu 特定指令加持的二进制翻译机,而容器就是打包后的进程在一个沙盒里跑。同一个宿主机上,原生环境下直接运行程序肯定比你二进制翻译快点了。

云原生就是云计算的漫威宇宙里面,又以 k8s 为基础新建了一套平行宇宙体系。

云计算里概念超级多,按服务的层次划分有 IaaS 、PaaS 一堆。一般情况下,你只要买虚拟机就行了。
sjmcefc2 18
sjmcefc2 131 天前
看来要想说的清云计算和虚拟化还是要好好梳理一番。
虚拟化是将物理资源( cpu,内存,存储,网络)进行整合共享的底层技术,就像是资源池一样能够将散落在不同裸金属物理机上的资源统一进行管理。这里面虚拟化又有不同的分层,type1 和 type2,不过我好像没怎么理解 type2.

云计算是虚拟化的应用,是一套能够帮助人们进行资源管理的操作系统。而云原生就是以 k8s 为基础的云计算。
现在的云计算都是以 docker 为基础的容器化?
lihongming 19
lihongming 130 天前 via iPhone
因为很多人对云的理解还停留在*阶段——VPS,就这个阶段而言,云计算跟虚拟化对用户而言真没什么区别。

但云计算远不止是 VPS,而是基于 VPS 之上的自动化服务,让 VPS 的创建和销毁不再由用户管理,而是服务根据负载需求自动伸缩,俗称 Infrastructure as a service 。比如*近开始流行的函数计算。

目前 AWS 是云计算的领军企业,已经把很多东西都 serverless 了,比如 mysql 、container 、对象存储。当然,还有他*的 DynamoDB (一种 NoSQL 数据库)。

使用 Serverless 需要很多观念上的转变,比如性能问题、费用问题,很多人还是不习惯,一想问题就会代入传统思路,导致南辕北辙。但一旦你彻底建立了 Serverless 思维,就再也不想回去了,真的太方便了,大大提高开发效率。
togou 20
togou 130 天前
@lihongming 是开发效率还是运维效率啊? 麻烦问一下
lihongming 21
lihongming 130 天前 via iPhone
@togou 我不是做运维的,单纯从开发角度讲的。

但运维肯定也省了不少事,因为对 infrastructure 的原始需求都是程序员写在 CloudFormation 配置文件里的,运维主要是监控并优化配置文件里的参数。

serverless 架构下,大家都不需要管理服务器,只需通过配置文件告诉云平台需要什么样的运行环境即可。
chy1024 22
chy1024 121 天前
@JohnSnow “在边缘计算领域已经有基于 kvm 虚拟化技术的容器了”,请问有什么关键字可以搜索到相关的资料?
JohnSnow 23
JohnSnow 121 天前 via iPhone
@chy1024 kata rust-vmm

前端程序员关于 Docker 和 Kubernetes 的一点疑惑

1 naoh1000 · 125 天前 via iPhone · 3897 次点击
这是一个创建于 125 天前的主题,其中的信息可能已经有所发展或是发生改变。
前端想要转后端的垃圾程序员,*近写了一些自己的项目,打算用 Docker 和 Kubernetes 部署,遇到了一些疑惑,查了很多资料后没有解决,希望大佬能够帮忙解答。

单节点服务有必要使用 k8s 吗? 官网写的 k8s 功能和优势大多数都表现在多服务器,项目初期只有一台服务器有必要使用 k8s 吗?
有必要自建 Docker Registry ? 如果项目都是在自己的服务器部署,有必要通过自建 Docker Registry 来绕开 Docker Hub 不充钱只能创建 1 个私有项目的限制吗?我看到一些个人开发者是在服务器上 git pull & docker build -t xxxx
多个项目应该使用多个数据库容器还是共用一个? 经常在搜索引擎上看到“数据库应该装在 Docker 里吗”这样的问题,不同人持不同看法。想知道如果我把数据库安装在 Docker 里,多个项目应该使用多个数据库容器还是共用一个?如果使用 Docker Compose 部署,大多数情况下每个项目都会自带一个数据库,是否会拖慢速度?这样的话如何方便的管理数据库里的数据?
如何方便的管理运行在一台服务器上的多个项目? 相互没有联系的容器。之前使用过 Docker Compose 管理,发现一个项目的容器启动后想关掉就只能关掉 docker-compose.yml 里的全部容器了,很不方便,现在自己写了一个 py 脚本管理,大佬们有没有更好的方法?
Docker 容器 数据库 k8s19 条回复 • 2020-12-05 22:55:13 +08:00
holulu 1
holulu 125 天前
直接去有 k8s 服务的云服务商上开集群就行了,数据库服务、Docker Registry 服务、部署管理服务啥都有,没必要自己折腾这么底层的。上面几点现在都是运维考虑的,开发者基本不考虑这些。
snowfuck 2
snowfuck 125 天前 ❤️ 1
1.没有,你的理解是对的; k8s 是应对大规模容器化部署运维的,没这个需要没有上的必要
2.没有,怎么方便怎么来
3.数据库用同一个会好一点,跑多个就要占用多份资源;可以看下别人的 compose 文件改下
4.docker-compose -f docker-compose.yaml stop xxx ; 这里的 xxx 是 compose 里定义的一个服务,是可以用 docker compose 管理单个服务的,有依赖另当别论

我不是大佬,一点浅见仅供参考。
cnbattle 3
cnbattle 125 天前 via Android
1 没必要
2 不用 可以用阿里云或腾讯云 等的免费的服务
3 只有一台服务器的话 ,没多版本需要,就用一个,否则多个
4 自己使用问题 可以指定停止

个人拙见
lizheming 4
lizheming 125 天前 via iPhone
1. 单机都是直接 docker-compose 超级方便
2. Github Registry 了解一下,可以私有项目传镜像哦
3. 数据库建议一个,这样备份也好备份呀~直接设置 net 在同一个网络下应该就行了
4. 楼上说的+1
lizheming 5
lizheming 125 天前 via iPhone
@cnbattle 阿里云镜像仓库好像是收费的?腾讯云的目前公测免费倒是。
yzbythesea 6
yzbythesea 125 天前
小项目不上云就用 docker compose
eudore 7
eudore 125 天前
1 、私人小项目就 rancher 或 docker compose
2 、Registry 除了 hub 还有各种云都有免费的使用。
3 、数据可以放 docker 里面,然后-v 把数据卷挂载进去就好了
4 、建议使用 rancher 就是一个 web 版 dockercompose,compose 我用的少,启动是可以指定配置文件去 up 的。
cnbattle 8
cnbattle 125 天前 ❤️ 1
@lizheming 有个人开发者免费的方案
lizheming 9
lizheming 125 天前 via iPhone
@cnbattle 原来如此!
ztechstack 10
ztechstack 125 天前
1. 单节点纯 docker 即可,3 节点以上可以使用 swarm 管理,一般上没有 20 台机器不推荐用 k8s 。
2. 单节点可以不折腾镜像仓库,如果服务器本地构建镜像可以不折腾,如果远程构建搭一个也很简单。
3. 公用一个数据库服务器(容器),我现在都是使用 docker 管理(包括一些生产环境),现在好一点的镜像都是使用外部数据库服务的。
4. 开源项目 portainer 了解一下,可视化管理。

echowuhao 11
echowuhao 125 天前
99%的项目不需要 k8s
yuzhiquan 12
yuzhiquan 125 天前
前端对应的概念不是 serverless 吗?
hantsy 13
hantsy 125 天前
Docker Compose 现在也支持云部署啦。
在 Docker Cloud 和 Docker Swarm 市场反响不好的情况,Docker 另辟途径,让 Docker Compose 规范去兼容 K8S,这个项目开发很长时间了,目前好像 AWS 可以用了。

https://aws.amazon.com/blogs/containers/deploy-applications-on-amazon-ecs-using-docker-compose/
hantsy 14
hantsy 125 天前
前端一样要用 Docker 啊。

可以在 CI 把项目编译把包,用 Docker Image 发布。
monkeyWie 15
monkeyWie 125 天前 via Android
单机可以试试 k3s
mauve 16
mauve 125 天前 via iPhone
gitlab 免费版全都有
hardy4y 17
hardy4y 125 天前
直接上阿里云的 serverless 不香吗?屏蔽了 node 的概念,不用关注又多少个节点,阿里云的 docker registry 也不收费啊.
单节点想用 k8s 的特性可以用 k3s.
mywaiting 18
mywaiting 124 天前
1 、单服务节点没有必要用 k8s,如果自己实在想用这类编排实现,建议可以试试 hashicorp nomad 比 k8s 心智负担少很多
2 、没有必要自建,Github 有
3 、项目有相关性的可以一个容器,无相关的多个容器。自己的项目还单节点服务器,一个容器简单方便
4 、见 2 楼现成的命令
chenqh 19
chenqh 124 天前
借楼问一下,docker-compose 怎么实现滚动重启 app?

云平台的层次架构

云计算平台
​ 云计算是一种资源的服务模式,该模式可以实现随时随地、便捷按需地从可配置计算资源共享池中获取所需的资源(如网络、服务器、存储、应用及服务),资源能够快速供应并释放,大大减少了资源管理工作开销。

​ 经典云计算架构包括IaaS ( Infrastructure as a Service,基础设施即服务)、PaaS ( Platform as a
Service,平台即服务)、SaaS ( Software as a Service,软件即服务)三层服务,如图所示。

IaaS层为基础设施运维人员服务,提供计算、存储、网络及其他基础资源,云平台使用者可以在上面部署和运行包括操作系统和应用程序在内的任意软件,无需再为基础设施的管理而分心。
PaaS层为应用开发人员服务,提供支撑应用运行所需的软件运行时环境、相关工具与服务,如数据库服务、日志服务、监控服务等,让应用开发者可以专注于核心业务的开发。
SaaS层为一般用户服务,提供了一套完整可用的软件系统,让一般用户无需关注技术细节,只需通过浏览器、应用客户端等方式就能使用部署在云上的应用服务。​

%title插图%num

​ IaaS平台接管了所有的资源虚拟化工作,通过软件定义的方式来为云租户提供虚拟的计算、网络和存储资源。PaaS平台接管了所有的运行时环境和应用支撑工作,云平台的租户因此可以申请配额内的计算单元而不是虚拟机资源来运行自己的服务。当前不少经典PaaS平台已经采用容器作为计算单元,那些仍然依靠虚拟机提供应用运行时支持的PaaS平台在本书中将被称为IaaS+平台。云平台调度这些计算单元用以部署和运行租户的代码制品。在这两层的基础上,用户部署的应用和服务通过API响应的方式组成一系列集合服务于*终用户,这就是所谓SaaS。上述过程其实描述了一个清晰可见的层次结构,如图所示:

%title插图%num

SAP云平台架构概述

在我们开始SAP云平台的架构之旅之前,让我们先看看SAP已经发布的一些其他云产品。这些云产品方案可以分为公有云和私有云两种。

SAP公有云解决方案见下图*右侧,比较著名的有SAP SuccessFactors和SAP Cloud for Customer(C4C)等,作为SAP软件即服务(SaaS)的解决方案。

以SAP C4C为例,软件应用和计算资源均由SAP提供,部署于SAP的数据中心,用户通过Internet来访问使用软件。所有C4C客户以不同租户(tenant)的方式共享SAP数据中心的软硬件资源。

而*左侧的SAP HANA Enterprise Cloud,是SAP一个私有云平台。这个平台上能购买的方案*主要的就是SAP S/4HANA(当然也有Business Suite等)。私有云的客户独享云上的资源。

从*张图也能看到SAP的云解决方案使用了部分开源技术栈,比如CloudFoundry,可以把它看成是PaaS的操作系统。

下面这张图有两个环形,*里面的环形包裹的是SAP核心业务应用,既有On-Premise的SAP S/4HANA又有基于Cloud的产品。

第二个环形,就是咱们Partner和客户大显身手的地方:通过SAP云平台,我们可以快速构建出轻量级的应用,和SAP核心业务应用做集成。

SAP云平台能够帮助企业的数字化转型得更敏捷,更高效,更彻底。

通过SAP云平台,您可以方便的扩展现有的On Premise和云解决方案,*大化利用您之前的投资。SAP应用中心 Application Center上有丰富的应用,可以下载并部署到SAP云平台上运行。

On-Premise和Cloud解决方案可以通过SAP云平台连接起来。应用,数据和业务流程也通过SAP云平台成为数字化网格Digital Mesh的一个个节点,从而消除了信息和数据孤岛。

借助SAP云平台您可以尝试将发展迅猛的*新技术集成到SAP传统产品中,比如机器学习,物联网,区块链服务等等。

先从下图底部黄色区域的基础设施层Infrastructure Layer讲起。为什么在这张图里能看到其他的云平台提供商,比如Amazon,Microsoft和Google?

这就要从SAP云平台的编程环境说起。
打开SAP云平台Cockpit,在Region标签页内能发现:Neo编程环境的底层基础设施由SAP自己提供,而CloudFoundry编程环境的底层基础设施由其他公有云基础设施提供商提供。

————————————————

原文链接:https://blog.csdn.net/i042416/article/details/82181311