幂等性 个人理解及应用

[原创链接: http://www.smithfox.com/?e=16 转载请保留此声明, 谢谢]

绝大部分网络上对幂等性的解释类似于:

"幂等性是指重复使用同样的参数调用同一方法时总能获得同样的结果。比如对同一资源的GET请求访问结果都是一样的。"

我认为这种解释是非常错误的, 幂等性强调的是外界通过接口对系统内部的影响, 外界怎么看系统和幂等性没有关系. 就上面这种解释, System.getCPULoad(), 这两次调用返回能一样吗? 但因为是只读接口, 对系统内部状态没有影响, 所以这个函数还是幂等性的.

首先了解一下什么是幂等性,如果你没有兴趣可以直接跳过这段代数概念解释 :)

幂等(idempotence)是来自于高等代数中的概念。

定义如下(加入了自己理解):

单目运算, x为某集合内的任意数, f为运算子如果满足f(x)=f(f(x)), 那么我们称f运算为具有幂等性(idempotent)

比如在实数集中,绝对值运算就是一个例子: abs(a)=abs(abs(a))

双目运算,x为某集合内的任意数, f为运算子如果满足f(x,x)=x, f运算的前提是两个参数都同为x, 那么我们也称f运算为具有幂等性

比如在实数集中,求两个数的最大值的函数: max(x,x) = x, 还有布尔代数中,逻辑运算 "与", "或" 也都是幂等运算, 因为他们符合AND(0,0) = 0, AND(1,1) = 1, OR(0,0) = 0, OR(1,1) = 1

在将幂等性应用到软件开发中,需要一些更深的理解. 我的理解如下:

数学处理的是运算和数值, 程序开发中往往处理的是对象和函数. 但是我们不能简单地理解为数学幂等中的运算就是函数,而数值就是对象!!

比如有Person对象有两个属性weight和age,但是所有的function只能对其中一个属性操作. 所以从这个层面我们可以理解为: 函数只对该函数所操作的对象某个属性具有幂等性, 而不是说对整个对象有运算幂等性.

Person {
 private int weight;
 private int age;
 //是幂等函数
 public void setAge(int v){
     this.age = v; 
 }
 //不是幂等函数
 public void increaseAge(){
     this.age++;
 } 
 //是幂等函数
 public void setWeight(int v){
     this.weight=v+10;//故意加10斤!!
 }
}

还有一点必须要澄清的是: 幂等性所表达的概念关注的是数学层面的运算和数值, 并没有提及到数值的安全性问题.

比如上面的Person的setAge函数, 有两种case不是幂等性所关心的, 但程序开发却又必须要关心的:

1. 两个线程同时调用

2. 因为age从业务上讲不可能递减, 如果前一次调用设置是30岁, 后一次调用变成了10岁或是更离谱的 -1 岁

所以RESTful设计中将幂等性和安全性是作为两个不同的指标来衡量POST,PUT,GET,DELETE操作的:

重要方法 安全? 幂等?
GET
DELETE
PUT
POST

幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试.

就象cache有cache基本实现范式一样, 幂等也有自己的固定外部调用范式
cache实现范式:
value getValue(key){
    value = getValueFromCache(key);

    if( value == null ){
        value = readFromPersistence(key);
        saveValueIntoCache(key,value);
    }

    return value;
}
幂等外部调用范式
client.age = 30;

while(一些退出条件){
    try{
        if(socket.setPersonAge(person,client.age) == FAILED){
	        int newAge = socket.getPersonAge();
	        //处理冲突问题: 因为age只可能越来越大,所以将client的age更新为server端更大的age
	        if(newAge>30){
			client.age = newAge;
			break;
		} else{
			//无法进行冲突解决,再次尝试
		}
        } else return;
    } catch(Exception){
        //发生网络异常, 再次尝试
    }
}

幂等接口的内部实现需要有对内保护机制, 一般情况是用类似于乐观锁的版本机制.版本重点是体现时间的先后.

[原创链接: http://www.smithfox.com/?e=16 转载请保留此声明, 谢谢]

smithfox | Monday 27 September 2010 at 1:29 pm | | Java        | Used tags:

six comments

Chanel iPhone 6 Plus Wallet Cases

In fact, the Nexus line is Google’s flagship device approach at showing their vision of Android and Android devices, making the Nexus 9 more than just another tablet offering.

Chanel iPhone 6 Plus Wallet Cases, (URL) - 20-04-’15 18:30
Coach iPhone 6 Plus Cases

The second part of the video shows the benefits of the Galaxy S6 when compared with the Elife E8. Some of the stronger points of the Samsung phone are wireless charging, the IR blaster, a heart rate sensor, and DDR4 RAM

Coach iPhone 6 Plus Cases, (URL) - 18-06-’15 16:35
Yeezy Boost 350 Replik

In an email to Footwear News, Dominic Chambrone — aka The Shoe Surgeon — confirmed that he would offer five slots to customers looking to have the original gray suede Adidas Yeezy Boost 750 customized in an all-red colorway

Yeezy Boost 350 Replik, (URL) - 01-06-’16 14:42
ménage Longueui

Rien n’est plus motivant pour nos intervenantes que de savoir un client satisfait du travail accompli.

Pourquoi faire appel à une multitudee d’intervenants alors que vous pouviez confier à
G.E.M la réalisation de toutes ces tâches ménagères ?

Renseignez-vous surr notre forfait de 45 dollars pour le premier service régulier !

Regroupez la réalisation de ces travaux chez un seul prestataire
! Pour votre plus grande satisfaction, faites de G.E.M
votre unique intervenant qui pourra assurer tout au
long de l’année la continuité d’un service
de haute qualité et à la carte !ménage maison,ménage
entreprise,ménage dee bureaux,ménage résidentiel Montréal
Entretien ménager résidentiel, Entretien ménager commercial, Granmd ménage résidentiel et commercial, Lavage de
Vitres, Lavage de tapis, Décapage et Cirage de planchers et Plus.

Simplifiez-vous la vie et gagnez een tranquillité d’esprit !ménage maison,ménage entreprise,ménage de bureaux,ménage
résidentiel Montréal,ménage résidentiel Laval,
Notr option BIO ,une entreprise de nettoyage industriel spécialisée dans la
propreté de vos locaux professionnels (immeubles,
bureaux, locaux industriels).L’équipe est composée d’agents
de nettoyage qualifiés prêts à intervenir surr tous les types de chantiers,,
après l’élaboration d’un devis de nettoyage complet et
précis, qu’il s’agisse d’une intervention de nettoyage particulier
ou d’un nettoyage de locaux professionnels.
propose des prestations avec une équipe hautement qualifiée ainsi
que ddu matériel de nettoyage répondant à tous les besoins de nettoyage dans les bureaux.

Si beaucoup pensent que le nettoyage de bureaux se résume à passer l’aspirateur, nettoyer les
vitrines et vider les poubelles,

 Un Personnel formé au ménage écologique

Les moyens humains mis en œuvre, lee nombre de personnes engagées
pour la mission, le niveau de compétences spécifiques, les amplitudes horaires qui peuvent
être demandées sont des critères de notre personnel.

Afin d’assurer avec professionnalisme l’entretien écologique de vos locaux, l’ensemble de notre
personnel a subi une formatioon visant à nettoyer efficacement toht en respectant l’environnement : Connaissance
de la manipulation eet de l’utilisation des produits verts, Connaître
et mettre en œuvre les bons gestes réduisant les consommations d’énergie (eau,
électricité…). Sélection d’outils de
nettoyage efficaces et faibles consommateurs de détergents.

 Produits biodégradables

Service d’entretien et de Nettoyage Résidentiel :En réponse
aux nombreuses demandees que nous avons reçues au fil des ans, nous offons désormais via unn réseau
de franchisés un service de qualité supérieure Partout à Montréal Rive Nord et Rive Sud.

En faisant appel à une entreprise telle que G.E.M Québec,
vous avez laa garantie d’un nettoyage régulier et de qualité professionnelle.

Les prestations sont effectuées par des agents d’entretien qualifiés qui sont formés auux techniques de nettoyage
propres à vos types de locaux.

Pour satisfaire tous vos besoins en matière d’entretien ménager, G.E.M vous offre un service d’entretien et de nettoyage résidentiel dee haute qualité à un prix
parfaiutement compétitif. Tout le ménage de votre domicile est pensé et réalisé dans sees moindres détails.

Lorsque vous remettez l’entretien de votre maison aux mains méticuleuses
de G.E.M, rien n’est laissé au hasard.

Chaque pièce est importante, et ce dans ses moindres recoins.

Non seulement nous allions notre savoir-faire à une efficacité qui dépassera vos attentes,
mais chaque entretien ménager est effectué avec la plus grande discrétion.Service d’entretien et de nettoyage résidentiel

ménage Longueui, (URL) - 13-06-’17 20:53
entretien ménager COMMERCIAL

Toujours plous performant et soucieux de satisfaire au
mieux les besoins de sa clientèle, G.E.M vous propose une solution unique avec ses forfaits mensuels !

Toujours des produits écologiques, car G.E.M estt respechtueux dee l’environnement
et de votre santé !

Toujours des arifs parfaitement adaptés et étudiés spécialement pour voius par G.E.M selon le type dee
votre résidence.service de nettoyage résidentiel,
Entretien ménager

Notre service résidentiel d’entretien et de nettoyage personnalisé
vous garantfit toute l’attention nécessaire à assurer la salubrité dde votre maison. Nos produits écologiques et notre technologie haut de gamme noous permettent de débarrasser votre résidence de bactéries et de graisse sans utilisation dee produits
chjimiques néfastes à votre environnement. Nous assurons un nettoyage complet
des chambres à coucher, salles dee bains, cuisines et salles de séjour, ainsi que
tout endroit diffficile à traiter. Quelle que
soit la difficulté du projet

entretien ménager COMMERCIAL, (URL) - 26-06-’17 22:10
ménage commercial Boucherville

le spécialiste du Grand Ménage commercial à Montréal.

Nous vous offrons la gamme la plus complète du grand ménage commercial à Montréal, Rive Norrd et Rive Sud,
ett nous réajustons noss services à vos besoins.
Notre service couvre différends secteurs d’activité:

Restaurants CPE et Garderies Privés Cliniques ett Milieux Hospitaliers Concessionnaires automobiles Centrfes de Conditionnement Physiques Institutions Publiques et Ecoles
Compagnie entretien ménager
Faites-nous confiance, nous nous occupons dee tout !
Que ce soit au travail ou à la maison, la propreté générale
de l’environnement peut affeecter votre santé,
ainsi que celle de votre entourage. C’est pourquoi un entretien soigné eet régulier est nécessaire pour assurer efficacement la salubrité optimale du domicile ou de l’espace de travail.entretien ménager commercial ,entretien ménager commercial
Brossard, entretien ménager commercial Longueuil
Compagnie de nettoyage
Si faire le temps vous manque pour faire un grand-ménage il est temps
d’appelerG.E.M ménage, notre compagnie de professionnels de nettoyage !

Il n’est ppas nécessaire de faire un grand ménage de toute la maison pour avoir recoure à nos services, nous disposons aussi d’équipes de
ménage professionnel eet d’experts en nettoyage pour dees
plus petits projets spécifiques comme laver les vitres, laver les tapis,
laer les murs seulement, les divans ou, nettoyer les conduuits de ventilation.

Compagnie d’entretien ménager
G.E.M ménage une compagnie d’entretien ménager professionnel, spécialisée en grand-ménage,
commercial, résidentiel et industriel spécialisée dans le grand-ménage à Montréal.

Rien n’est plus motivant pour nos intervenantes que de savoir un clpient satisfai du travail
accompli. Pourquoi faire appel à unne multitude d’intervenants alokrs que vous pouviez confier à G.E.M la réalisation de toutes ces tâches ménagères
? Renseignez-vous sur noyre forfait de 45 dollars pour le premier service régulier !
Regroupez la réalisation de ces travaux chrz
uun seull prestataire !Pour votre pluys grande satisfaction, faites
de G.E.M votre unique intervenant qui pourra assurer tout au long de l’année la continuité d’un service de haute qualité et à la carte !
Entretien ménager résidentiel, Entretien ménager commercial, Grand ménage résidentiel et commercial, Lavage de Vitres, Lavage de
tapis, Décapage et Cirage dde planchers et Plus.

Les mooyens humains mis en œuvre, le nombre de personnes engagées
pour la mission, lee nivau de compétencesspécifiques, les amplitudes horaires qui
peuvent être demandées sont des critères de notre personnel.
Afin d’assurer avec professionnalisme l’entretien écologique de vos locaux, l’ensemble de
notre personnel a subi une fomation visant à nettoyer efficacement tojt enn respectant l’environnement : Connaissance de la manipulation et de
l’utilisation ddes produits verts, Connaître ett mettre een œuvre les bons
gestes réduisant les consommations d’énergie (eau, électricité…).
Sélection d’outils de nettoyge efficaces et faiblss consommateurs de détergents
Nous offrons une gamme dee services de ménage « à la carte » tel que ménage après
rénovation pouhr éliminer lla poussière, ménage déménagement pour emménagerdans une résidence impeccable, ou simplement ménage
ddu printemps résidentiel ou commercial etc…
Compagnie d’entretien ménager résidentiel
Confiez-nous votre maison pour uun nrttoyage complet à chaque
visite. G.E.M ménage est uneentreprise professionnelle dee ménage àdomicile.

Notre équipe esst constitué professionnelsqui connaissent votre environnwment et vos besoins
de ménage résidentiel. Ce sont des personnes pour qui votre
satisfaction est primordiale.
Compagnie d’entretien ménager commercial
Il y a plusieurs avantages à choisir une compagnie de ménage
commercial bien gérée avec des équipes spécialisées pour votre grand ménage : le travail est mieux fait,
de manière effidace et à tauhx concurrentiels.

Chaque équipe travaille aveec des méthodes
équipements et produits efficaces, pour les tâches spécifiques qu’ils ont à effectuer selon votre contrat dee ménage.

ménage commercial Boucherville, (URL) - 07-07-’17 05:42
(optional field)
(optional field)
为阻止垃圾广告, 请在提交评论前, 回答一个简单问题(Please answer an simple question)
Remember personal info?
Notify
Small print: All html tags except <b> and <i> will be removed from your comment. You can make links by just typing the url or mail-address.