From 5793e51cb0b975a5ea82a52540a14ecfb94342f0 Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 21 Nov 2020 18:46:20 +0800 Subject: [PATCH 01/22] cache-aside-pattern --- .../cache-aside-read.drawio | 1 + .../缓存读写策略/cache-aside-read.png | Bin 0 -> 72152 bytes .../cache-aside-write.drawio | 1 + .../缓存读写策略/cache-aside-write.png | Bin 0 -> 58777 bytes .../Redis/some-concepts-of-caching.md | 59 ++++++++++++++++-- 5 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 docs/database/Redis/images/缓存读写策略/cache-aside-read.drawio create mode 100644 docs/database/Redis/images/缓存读写策略/cache-aside-read.png create mode 100644 docs/database/Redis/images/缓存读写策略/cache-aside-write.drawio create mode 100644 docs/database/Redis/images/缓存读写策略/cache-aside-write.png diff --git a/docs/database/Redis/images/缓存读写策略/cache-aside-read.drawio b/docs/database/Redis/images/缓存读写策略/cache-aside-read.drawio new file mode 100644 index 00000000..fbae0cc1 --- /dev/null +++ b/docs/database/Redis/images/缓存读写策略/cache-aside-read.drawio @@ -0,0 +1 @@ +7LzHruXKth34NbdZAD25mvTee/bovff8+iIzz9V7D5JQKqCqJW1krs0dZPiIMceYM7j+BdP9xS/xVKljlnf/goDs+hfM/AuCQBDA3l9fyv035QcAfxPKpc7+eeg/Euz6yf9J/Pdje53l6395cBvHbqun/5qYjsOQp9t/SYuXZTz/62PF2P3XWqe4zP+7BDuNu/8+1a+zrfqbSkD4f6QLeV1W/64ZxH5/7/Txvx/+pydrFWfj+Z+SYPZfML2M4/b3qr/ovPsG79/j8jcf9z+5+98atuTD9r+S4erCBEKJwJaXDPaARMNz4P/6p5Qj7vZ/OvxPY7f73yPwtnv6Luv+z1BRR75s9TtASpzknTGu9VaPw3s/Gbdt7N8Huu8GFadtuYz7kNFjNy5/ioKLPz//qQyyq8sv7zZOb2q8Tn+nsKiv/G019adK8t+pwL9T3uss3uJ/weTfPyFuGsp/QXTtUbp1AjJfjuT7o9luxbrle6V+H4xIk+H7m958GcvfC3cDOtb0LCTYoYwu7H9BFAQ6woFbNmLOCqZFNhBbtJWO4GTeUV9jsrtzfMWKLh/oiWZVim0PdqlOLuydUQua7Z1RQAsscFi18dsf0Dh+eLDh72KhvomBuPzvr5V4L6jfMxw6Ef25SYHwEby/8IN4PyP09zv2Aj1WAn1+AyNFtk3TJq1fPGLxsvNd7xcnlruTtWadkiPb2hqS1y5pS/pbAGWpNG8yKJUoVTcDrGmLoqpuLOpQK21bZJJs3cyS9pusqRmJO1VL2pcYJVs1sqXtiCKlZydu/klGonijWrakHUW09PRMzLI1/ftPMsvWNMMolu6eCdm2Jg/hUVyRbPsmO4KpA0hEsqvN+3gYUyLb3jTpDKkOiF9yzvuLGVEi2d436wwqD4gSy637l2xRYlmeN+B0Kn9KEkttO+SPJiW9ycAFMJvOm5TCVt0O8aVNSWpZsui7kugvWfg6zZs2KalrxaIPtdG09f88FjwwvGNXxnZSBxMxyfuqGw/rDkd7mIWO42hx/474nb8YOWyPwlb8l9l2Jub9QjecTr+Zl724nZ9Z9IS7ycm7Kjm772v161edIJ1iN/PT6jzfNsh7zztAPQmIBYt9O3jrBCMlB+KmePNRRE9b4nM554R35FeyW1/3m0d5/7fvf0tpJ6THEvc6ry2wL4U1jjxQWkKpDR7MGs/z36fQWUzXZT6i+1RnR1QSqUjoNzsFNJjDHQ86vxBArRfTNegCH4aotzfzSBMJuwxRYvYxaPnRYxuxWUJXaVcEJm1pR9rIDh4mpslv6uDsrQcMf3LeNbA3RGVISV8Db4uIbkEAi6zY53F5pgBw2f7w0cBrQlAr95MfRJ0I7jMh0sQB5hv/oelwR3ryS+q7mcTyAohwgeZCzntMRjdjxnsCz6WJmH8+FRaxUnY3sT65p0mPxMGTS2e/C29yt21oq8E6USLZvag3goXsojfeKtVv98lvl4OfKFNq0oTAu3QExGg+GBHz4cn592rZTVR6WLOd6UAwA8JYIDromIKyqR+wYFbbHvwFOZJYAYrbHYIB8jqfEN9AoCIxzdZq9ZkoEWvtfVPWNfVZ0XxOEr8kbDAIeXDkm2K1C0onqamDGnJf2R40iIOGGbrsLSPV/gLDPc9oCFtdyihETPiavPFXzdPPWHT1tx4+cHmO+rZ+C2biNiFV6xITS3RyL6pD1gPPAtqWO3eUHug5Rcvaw5dlBMkBr7hN3Oe9vUFnJnGXIHykp70CG33LLbcrATp1fgZrC6sT/JbczEnaz+l6F6yOKLTDb+mMSTUMtmqjamzHqydsdMIDwa4c6ZLdWMGz70O+347R3VvvpSUqFQY/CeIhh4aT6rdSXOwM5h17t98LsUOw3UsI5Khxg7LyTloVMTYNclW85kMv6MGh41uTkwYEoMrO9U/gvGv5LaWnMzgek9qmghYweVbBmoo6TtMTZHkfqGNNOQzHfhPN00sb1rS03UNNWWkXS8/47mfQMAbbtLJq7Zb7pyxFxsn55T13yYYp8bU9PATI7NA5C9sMdQAfYXkDcGznTGYMVDyZtKo4DXjN/RaY+RMfsTK3kdZtSSB2LF19njUcpU3Lm3lBo3utTGuGcKOJICjNkGK+nTDi5llQ4zXlHE1lQTxGL7ixNyzYuPTt53awHtvKEC4Ivsf7tEvjZuRicRdxBoQ6fvvgiXUqjYq6UrQqKIbpgm7mJrbUy3WSvwZIaNdSxCLhvexC6+ANNKbuXnAmUuhK9cH/tN/fpOZgRyz+WtOGqkOhtdoOGRxBqqLqvk0XotwaqMU2SicEtTNlFcIJSa75/PLbYmvJnovvoLdciR4Dolm8wuEzF8xNXTM6wF4v1M/2ocStWVZKVGOktBpsY6Js2/oRZykJYo3rvENloZWeF07ZhZYLpf/bGuBlF6QV3R27RvPRjea7FArzupSl1V1FEti7qAdB1F4Mc9cUT7Ytfw0EkgVLVTVsB6QSEBAsHQKlcwII/A0lYcJ3snkxbZIOxFNkA80ebiIVTlHY+HOx+zl7ZPd6WegufU3c1/6LzMXBrtJVjO3odHPj61tQiujr+G3M0miIBRZG8fvjw9zreY3YjXGjfH6GhlJLTASV0Hx3Ojd+mIzJdWO8fGqFeJju+BjuihlcsGXL9xdNro5QnZK4B89lqoiIcr/xD0apiqNunSynwLCyK8bZQwPr7F+ESER8s7wGbUoYS9dllf0imEqgTlLwU6lfB7RGdljHsveGJbPXYxnM25/uovI8CXvUUhpDRo151+2fys6RGA1z6g/ePDYzBPXZAlgT6+/zAJKGu9oORliVc1WPyAVGV92xy7rhEV0W2Hc/1jTNVpQYD4yFGp8qNIXC+V19VB0ElUNbttHZuUzRnAZ5R+NZuQ+mBmX0K1vO8gOqRtpHZcm5BoJ2jQk5LBIIv3bqLYDP5GPnRGgBVseiUnPA8ESccNI8AppAqbdJPXL7GrWivTDL5opXiR+JpU4pNarFiSIOEtA1pfNOcPts1fO2oVbhPZL7ZAyLD4Pld+eRsyP0iG7XMIGcMo8oL18oKqALqaOOdgpk9DWLUlMbr1ae8xh7DuX3rSl7a/7gG19WByV2MlEP+N6q/jOQ50cH1+1dS8Ako8uGOrYqKewevYPcaawWZ/DvQkDhFyDzV9ZyG0HmrhGZTenaSFBFPmc9RNMZ6XE/8cpxobsd0X5+IjZbknefVrh8C30eKnbXzsQWmgzQIR87FKrbnJQBrJaVU6CNNpTuxQM16F7woJxMdiQDjPAQSd8/PzzpCHpvkv3jN1I0MBtlWO0LEdzuenSFpzrN1D9tWtzy1rvu8Ik75cWmawnz3TbLPXb9EJhRzukKTM9gB3ZtAr8mJKllPMA6c0owO48hkWx2qrK32WbX8Wb48dtDFW8ay2CTrKF56blCJDZbiv5RdcmuCBwK8ZjShf4bSlwC288etoqiTfKDonmn7Ut9Z4hSzmxf+vKHqRAR+6H58+7r50R6IMg1peVVPx+GHGc9bOvAtyrtnzhkJjIv7zWfdKm8/0yzUkr6eMlmdY+/8cA9GT9N1LwkEBZ7DgruT3uhK5vmJoNIO7DU1oxoWnxr0deqK87AmhTxn4SGQKCDbRWlv55iTOzHEuYdgOlqegmLo5T0wYW62eW1DVVs/qDr2B5XPPsdjYXsKrYO0z+mEX7zgVzcddZmiOjEGXaJyHUpD03CNJrfbgDhDrN4rF1ebIYT30rm14xxlCitJtFRAuT6S4dYAfKRUYpbsPFs7da80By7W9aAB3/UClP/jRTJ1cVOQpYqBDMSuTfE+nbEjJ9hkBn7JMshqBbI0KgwhJIM0x3HAY32L4GZX6YxaCgL/qECIe+2ZkDZNdvAz83fVzUDgPccXtPeJmPXIMx92GhVEv4yR8HpR9dMK6BWNqHSmev+GQ1Lu1K68Wu7jy6OFGKgLuOUlhbeSBXbumYhk+JHVxx5j1195DLjm0fIEam84KNLER9DfJ8hXjPqZqbGsrq52qGl5aNHEbYVi7OifSz/cH9tb7aoQEOn/DKs5hNxae1A37aoX+FlVoK5Dy808Ij6MtqXln7aTY8rpc1Vux5s6/BBUX0iqGgxHGZ36/kUgZiyOcUi0cZ0tyPi1fCtX/GER4u1t875nqPaCglUWcQXtepgx0gltZ4AWy0VdbSIDLOLDXn8xAFfsdbnw7fy8uLwxJqnOGwXv3Z/0uMFH+odVr1W4Pu3SNVBvEbq7e5MmdcGVpQkk8I39RD0zubPZiNPwsKhnZkG9lmfAdi663LilaHQZ9iCJUZLtneiwbVRBV+grboZBBU2RtR69xdNZRjpcD01mHsOkQYicBoNYVuTIC79oE/67sc+vBvGMi3YbXY10CqR3qhbfqgmZy33UFJg1suw2xR4Hqccn/xXy4XBs1aX9kx1N82Gl9ivPaUy6FiG3J4Y3B7messMu1nVygGAT09zKd7/CtX/+bRI4bhtO7l59vKTWyepgtTGFl8R/od2bNdK5zbr9aLmr5bSRz3zEBwjPBsQ3e2D/we+EqiSiJ+d+1VbxDC72LoV/rxRIcrbpkfsonNTkBnDHLs9kKLqwbu6B2lP+sjWpTxcznZOJ61eAz2XO5vMczyXEaXus0rqO7bztpRo7XOLnDsZarYsZG297fpld2nA0D95M6Bhc30z8EcHuvGGsrPpr0P8E+ikufXRQjrm/Bbf2L3swpQi7lUeYTW4j7FHuS1qcbRkub7i0qBrvnMZ38ZMYS+kxU9PGmVGeD3/XHI8eUBP/5j0EejNvHbFZjZNvc7RLycawf1bGIvTbnV9/vtc+7xQ7r+S913DFFxFNCtlpj/9/BdbJY83djCTysNE1YsbEjD3LKOXbl+saN3DDbsovUINHQtH8XJ3RJItvY6hVpOWeOehIQvo3lLpWKls6kjzqFkiOY8KWfx9ojWktN4APClIBZT/qAS9PCLyKi+ajdT4FYeeCbRQlhBsGri/uX9lK6WpNQd3mQPFQ4uLL3iv9fBQWdl1L2WyxOVRmyJZ27kFoyqHqcU4JW6UkHg/r1VTsTm2sQ91zbY2AuiPWdYxdP1aA0B+ZZNufqStCGA09LWonQLoh0uJsBnWDrJ/dNfAPY7CmigJ2UujD+1r1dFKUZgNHymjBeziV1efb4hNYyqqEMAvl0sGSiCz9rCHTTzHSBtdaPuWwKUrIln0pnP92sgSQRe/tQGwYVex6qD6qy79WnBwY+HBUTS31wbH99qWOeft9iuRujvKB9bxEQ/W8MuaiPVbO8LmNDbq79KkDxJKlNZFlp/pfBLcoLNUqNgLsq8XRCRuKSolPGw/EO4fbVFNTZFVJRlcdaWeH3od7poVp6gMHhhEOISIYMHbyX6AUykLuGIt+EeJWzTG/lkT6ro472ZjpDo2GBilmJ4mFdR1cIHJMIVUxFxrCY9mSUTS7QewxSSFNvLbZeZQL7ZPS38tzpowp182r2hU2krDfp7a9wyTDBady9vHxqWn3ZGHgsfFjPBuofUwDj669miKsFRQJupn9bBDKWngtix609nMS13qn8ortc6jYIMbw7FaAMZ8s3wJQmLchus/bxnFbzluwIuJMxq9jHc7mmUXg3QJtVdmt2BuQbFtr7KMijMkMXZz2MIGDUyPzBWRWDq7F1fM21s7JKhGztN92t8G9bdFQYYNSD9YB/RDt9dIQMc0nFV369FrKF4J0mX9JQomkLmyoRITPo64PqzrK/h9prw7+5kuGZ0+swBpkeN+bX32uvvoqfohIYaAc+LmUp1vEQ8c9WeTMNVQDNa8XjaJMtVF6w2XMVfIeLePLf6xkdIp9fbQZEGFpGVwl9PYv4hMByG6okYwEBY5OhHb4wsbnW7qxalkYTRACTgtiUoO2a04Ie8ajLYbbpMERXvKGTMy37WXK32OE4AnkjpP0vCyqWFx+9/5JPXEGtndjNTLr2Z4SgzWRjnZnnWmuT2fBXK0rnFNGErYL0l6x4LmeMaRNvioRJuZC0apvO8/fgePJKFXzuoty/cSOeutWo7bstW3kz3NvL/YWB5qGeOP5IvAiGvH45YqY8i3a+3yu3oJXDMHUU34k3lk1xHLmnbcdyi9TH0/Sd0B4FBTi5CNZ4ykKQ6u/q7P8PiQQ2vqoJHxdbM++8+x7J4O6aTSQy9Sg34BlY42iabyEklyqKBfaGUv8rSCqMYK5gUuh7YhVlfET4qV/C/a5q7NyY2jV4kPu1zbqm3onmBUS/hWpj4UELh17RcW3NSikZedBIUOkWKyQujLLssV+2ziPiQQR1q1cM+yr5YEO0naOcZzv70lrSXO+mNQHVeuPaFNPeSOaKT9BD/xeIlTkhrq/vWkPZgibQ9XGuCE5QntM0wqn4VxC+KV0J8TZuWM9TIcL6LuL8dxme2tBIrztqMTcrWHBcZ+2jbveIXyWPGiJKY/nz0JDr4zt3K4OCj8IXLHZhFsjIisDfoRaOb4Gnuit23ddaTUXmGwsQsgnBbWNXFhFyVNVq11eyRJKH4obNWdVqinKaYpSbWxZ07aZbFHJvSa2b42hB/EMNfAKv38LoxD2PZJn68dc0EeEWSO/5yyOcwrWPXNeZB9wDJ1wOfEX5u3Z9xD/3GukrMtjGgj/F57IrtQOpJD7v1YaoAmNKMOMMmt2RqYyY0rlQ3BVv+25D2Cdrp8U9LMdiTl7tIXHkMUpCNGxkwi44oeRgx/vhzb/aXZ3BEYOpsWuSKVmyf3NtOPsLOq75DJDTWxMU7nGCUXbszNU67AIVqRt/sVyyKYVqAoILNSlCv3Wp3BZ3TdPfChuHcZ/TQRANH2wcW/1mDPanuUP2mt+gqKyaJ5janTVU5YsSUJVmilnJdS46axTJ5Ax7pi/9JaOXoVh/Ez03QbXCCXnQUzvnmHqdlRAUQIUuWpLbac8CVSgkadnyV0W3DIdiBvbYrrY4kGz8fBZ7FgZlMs+MMLdysi2zvDptvcddNkjJcJEf07/xTPm0uG7pqpAjo286f0pBfP8QoLmFSraNSGno+9GDwSkXI3MuRoma7kr3thkSwZ/Ri3N1rXcsN2rFcRIOPYRTCwYvNaEKODaq2RHT0QYJv8BqTT0eXn29OJOgbtDxHJigleGb9zZabVJ18IEWG/JJ0rp4mEaI3Sym+CXwUcv49J7NZJzFmdTuuxcuvlO0rntCmRkZKVtxugS+QwVkkLLjaJVejIVit4OsBCnxE1Nepwq1TqdN0+2VmqVIXMjnmZne0VEOT1XJLT0GYUxaqdZE4mUvxgVXQQMzwH4sEnVjRR2nDKTFFblQcsHWYyw1YlLIDhkAGRUoDHBvDtiEFvlNZr2DkllhB6vRIi3SDgohCr4Ed07K+5tcn4LsTfYZlqlK3ycDufVy0A4kAPPNAjEVrtDp1O1yVDcuTbMv1cEpIoplT4/Oj+5RxFb44O3wmlciixUyaWmeDlH/8JNmdoq/Y3x7q576p+UN8Bl9iv+fx2yPsIkqC5ZyvzvKWugA4fqQVfkKWS4v3QkyKAMTEUQbZl9fS4LicybVuUXMo5gsWqSWndcfRzK6yLiJIvub7Od0fB5KujsvRX+B0RlS8/jELK+SZvtGxRXj9Fg//JNIoSy84k+swgApKvRMoItPA9ICxpT4wQzv4ylW+N+p4ff7KopSS16khOH2iAX51+URDTm4l1a9ojQwSMieSLxO17eizxl8Wk5FZd6anYvjiZ4BvB783gfrE2j3RxEPvqS5T9277HIt/6nwypPBXa+dYmBEYATgUfsq3N+6T7MQHsq20Rjo/Avlm+KJlc6im25dppEAwY5syv9v4KeS79oqqk7Xq6JaN0KIpfVBem/vtA9L+jyvmy5dd/SvonMM3nY59vy/0+8s/dF3/+ZvnnlACM//P3+R8xd/DfgfTqP8fb/50Y/xPnL/9b2f8RCv+Y3d9o+P+LyDj0v3Fk3AHa/4iMZ9gJWdbAMWB9Up7DBh19/c5wpsoDWhrW3m8OWlVXNr+ddtbXjIfjXoeaNdr6/SMxmT5CrabNyXc5Yf1sZq8q35wcGf5HyEcdHMHFq30uCMdB53m59TNFw7OfZX+xJ7ltbEhmTXja6qmElspyRGbVlGKRpxlcKE+yzqXlJJtWzMlootAj+/YCuSPRnK4tzMMaJKUOzBO/inp8d3pFCTlaobRUlnlSoyArmirL+khfGupJUOxtGhqaxTQp9jcrprgv9KJP06gu9G65USdpRbWs/h7mfOsgCZi7ZtGsQ5Hcrk3MX81GSu2YJ/YNsKSltWKIQ6qhvnUIdyro06tly7J+WMBCe6EUX3OF7sriml/FldPEJ3ExJ+lIJwF9Wp6kE9G04D3Mvzq+zmWvwGUoitulkXlUg7TUlnnywC9L+u0cLehghdZc+QrqCu1ExUxfbAnrxkj/3bkb8qBpsONt6p6P24ifG4/4g7MVsPyULzq4tyqeXYGRwsXnZpF+xwIZ3+RdIy21ZRw0Avw5Sp2NzSQPRJ8BdGYC5HpKlqiXV4Eh8DmfeA3nV769zaWAfjtmJjY4dmfk9vnUp/Db1t/tZp8I7BA7veKtccWeZgZKd+P27SrmhJUZ0SiEE4ybIC1m7/ZRJxMFq0Wm/fGuRECpoTIQIalr3xQ7QDsToUNDdm35kL3t7KCT8ijataFJCxRsB5sCtYfd5UUPsEsTRgka0nnmzn2GzlNGthxEYzbJy87zeX9yLg6C0UHYUTgXwQDuP67E/jfYG6VUj5gq2XlwZay8w8UiguP1sQ858PogQJlGSZkrfe4MMaSWDSFJTBdEsi57xkexlECtbPLzknI2Qqjkz5iX/fR4G655CcGsDStfpY+ZzKtCd6DDwuRrT2RnyIrFoCPkkksHkmL/ZZ/fIE7k17qzWH4CUK5dEYAzgiKxaSMV5veUwBlMvvh/I4CoAqBowPK3soqThAAZpekASpwCoUoiO7Y4O7G5XbUl9hK4YudGiDyj35+p6kS40ESKLM3nT1lUrIulkpGNI2WkJ0Ws+EFBmytoFb4PYC8vABXbjL7M+9zyFW4+XCgTUnMtDNUtdSKxkIA0kipeIqu25/xTNI4+meULMliaRAoGdsE03dKXt0pYPquvPQumzMklrZta0jQrRKR+PZAWnKCuTtM8SVa7yxbEIPMuhNhWrEl/bqLIzcJBDV9vecT5/VwBJyYs1m2jkkWiWHvDiw8Xvt55eavLO+wXjZhFwASB97BEy1qPa1oQnCh5fz2csOR6SDIy3hXp3qx68BHuYnvCftw2sfGpEdlni665npUuidUpll4ASSv6m/2RI2m2ul5DkcdK+izCkmoXzcuiu3j6OJ+xpj22ubG7CbdDuOEkk/fGO/a4DfhYQbv6Ur8KasVs3k66GSG2n7wvcwtf/q7hOwaWzS21vXFTuLabq52a4wR30Ol0GaiVCk7Foslxi9zrwvHx+r6Y7DF1259CCf0+sTrPyJHzqyG7mRgAchVwj+aN9UlOaozPHTT6ZN5xCOPd435cs1+z4uqZBHueoNGKmby3jnlv94cRJ4tXdC0INSJAMvtYmq4Zi3BxoXjOsBmYaXmvKnzpNDP2IEFRSGGOMv+CsaN9xIRcw8Im21fULm13L0FADcoZpm8bfKaUiJy2y45vlkDbBKDKbhpNR/CUKKN68j/mRq3AoeGdlgv8qKGVCzEFZpJv85f76i/IDBMinaqz+eM3yGqfG+QgivsKsyxBuQrUyZr/manFRibrmYfuj+e06G/SoD+fZ+KWxZ21/SoulkadHHFN++7xhvbtjc2h0UA2nohK56gY+/rwzZEEcfWilMZ3BaM1IVpOzUNb3j5rr2pMG0Q9GpsQrZZTmRSjSY74oQ7L/znsQRENq67+3QCQ+QO6Ogh6OXALOwNVWeeJh9ZpPLkLqPqiyb8NAFb3fvC3f6ijMSTu7KWbCjMEDAN0iVQhNAslXvyvGFyalPeE2clN+X2RctMcfnW4ZFrLOmStZVjRi1EEEQwZXMLDQXJvk1MsejjEQlvWHmu/aEdpUrD8kW77EjSxntpS9mvuEO1zhKW6P5HPdSpeoCR3fTmb361C2vur970sUVTxeNl0+MiJxrJ3GRuhfSZfxMi8RrB1HVYnGwH6gmO7H9MoLQZ3JdRNpROff2EjRXINlLdiG83UlpR1MbMzKHUW05xJPyblsi2l7DvFcQu1BZ2nOSESFVL2KonhFHBUyGoxP7v1Ku8AFItkq2PS4cU/BRc7t/887y2I2ZFo0iQI0o43eCFou+6qBITmRYYnDCVvF5rk7dhYE35cca/cmXrO6cZKYqcIBDmGewfLAW5TMwj1XqFE6UPPZLMb5J2JuvPWFGXXv1tgZUeiMLIF+pbe5/gvD4xXP/wXKKYDAF7vVJfYFtUKOSE2vrCFg9YFKl4PY4i8XB+xpdMiTVPr53KSEWB3ZBGe8SP9zuBtizYCpjVWNz/CB/MTeQS5zGw5TeyX52I+BQ3pPb5NSyop+bz6W6H7+Bb7Acnik6ywC2PIg3MSBh7m9HlOF9SBZO3MQsMAE0BCvkOM4B8nl4gbH4qvnxjU5XPBTbTABPvTQEUw1xN7wAmWSINcB9PX2TtHkd76fYew3I8f2hVFph+luX3QgAVRPMuPoGBnwR1hASdqEV1tUCaRlCtjt+HL2RspG+ymLTkJbVyczrBDRa8Ehommrbeh4z4gn/1eTkIZtMDWJlS5YlPnQ6I1CI0bIBKx9XI4HMUel1PX9GVbeCmCXVy4lVbyme0HnXTGEYf/Hv1q3f4Vkol9qa22fs4fhKK5xnsgZ6+NFQsbQvW/BWq9wDf9figLme8ecOhC/o1GnAHqF5H1HLO026up3PtF4KE71NPFdYdrejI9UCP0PfNa0Pdj+1HsStYyuD1CtIVS/8Upk3fz+jhmaVUHdL+hk8bRQtlB9WuHUx4Nz8xNMpR66F8+VE5x6wFDrQOlVN4WOwcy4YetHL2EojvVyZcASXeXUL7dn5iw9UsYrVXT6IrvJjLfFGpRzm8vvKOZCNRzyWqRtlZnh5cO/1K2qQONR8E9DnIl4ewvt6pIDwwfnw8trokUeOErFS3pMrp90PgBXMe0TcLxlZtizSJDJ6PfsQMGGsZnsPCpK3sTi0C19V8hXpOaFS4Tr7PFPJVuw07DWVhiwqzBA7VW+FHCsEJfdkyVYWFWSqt8noD87NwJC247mzgACJh1WIuCDRyxfyzb0ImcN2eqoZ/Rb2AexlmbOGwTnKDngV9esxrnGlE/ajA0FSj3dGZT7pxlxCYS/zOdSgf4JCtTwyvxM81lP5qT+007IQ9CeefoI+tRTfkJ6Kp+ZfRZmhP14kfKH1QiyRgFBJRS35g8NlfCDoMS1jTtiS9FKr0wC0Q80vTF+wTT/JxJ6W5gJFJh1TGxIzF2LSRzed2WLDG8VyLUTTHgalOS4mhUXPO42xNtPXh4dfKf26lH2muhP2/C5EJmsVQefQYCEYvUM2IVxxBj12gEdos549Fp0CDSIVCZpPVlf9q4423Cn7MXLQ/23KYU1o4bkAoVwSU/lN75L2e/0/HFX4nNVm0kmJozP++M6dnB7Q2Lcf0+tDBY+ZFWJ/B4Sm+JeDcAHhPZcmDSeI6P4dGq08rMxd6ZXqc1FjOzDMZDs3YjIZagLk9blIb5TEcQqfVs7l11sEEb8ecTi9b0hl57y47U4jvlzowG8oK6b8vUdxIz3rdijvNvNDO1VitObS2aIB9r7VpEWVl8drddNKtkYYDJYM1e0/1VvA2Sr1TfUTh4DIMmb8amuknxenvCtNYkpTaBomTQIWDEsR5X6epZP2EbkBJDs+IrZItqZ3MWMHh2miBQLZU0Xl46wfUFzA8KxbZkUVdU2L22XZwwn8ukWPtF962dbpsCzZRGMxTTEk/lf/EIjcV0ZKQccgDyNwghTqLPwSJ0wG7rydopjWksjzmJmov+VME2XTkEHgsnByGtmNSEhQ0M2peHRcmvuLMjav92TjK3sg8qhCuljG915kq0u4w0FBaJZF9OlszOR25eArgvB38lGmGWapqsHvjI4CTu2af3RhYlqoBJ9z2Xj45KvUyWCkcXCgM1e7IJxUjOB7Dq/d8QdWRS6ZRCvTLjhAxkmAGnlLqt+6QoXAeIR55BPs0P+LGQk/Y+f8ZLeKJjayU8R+TrEuLGepGChCksRnlulS5bhPytAtrCPpoBfZX4zkpcQ/w0WUudim3zWEJe+hcWwi7NhUceT5Ujq4FwFeuIO2UZNAouhJkydM88KDXajetIlH+1BnF+5105TeH2mdcmP0jFkwTYuJspyMVgRNbifZVPRBobUnc0sruYMQ7BaUELoFdPvafp6OR4daevOgdnuIZ9cQWQdanX+gIbv04j0HpFPhvgn7hYyU6wlyk2DSwORZX8kKZezk6fhXcwXxyub1RvqI9lHiQS1qIoqa+prCvVvKCT9v2nEWGqFNn8o0zeuye/SD+Fam5rKdxtu5zJYkvtOf1DVaw6pScrh147oRhckUBHZpkvnHzNoiQNLT/avV/U8aimswh5uYoiSPiX6uS/4GZ42J7p8HOmMtknLjNfP3fRhY9rJSVllbYKrD/qGj1UCT8x1hUA60zMzy9h457GLaIyUhod6nsRomVl2WwExEvmpTq+CdfeZuZ5gywDApYMknAMWiak8nkvOV7qzsp/gj/HOU6BdgQeavCE4odWrBUCWV9lV9dSZqJKD8JIr/YY7zaUwnKhY259uThl5Xg/UyfkcSblB+XYUCPShqTUmyIdewfHWPFGqa2VYOv4gcDXVgw0NTnoNPntCXWt2+/0mt7IitphK2tZMDDJVJe1B+01c9pVeJ3p78isuHazO6hS5/5IiilBuh6tb0VxFZzHqZFSl2WPJI28VLlqAyyauWZF+arzXBRDdD/KTcHvkA9kc4oH9VYzo47XWxeI2hrJHsCao/Wb/ZMj61nR6tbufsbrOv6yPy7a7qdirZxbzWbX0Kc/bPa1GDbKhJcA0Sl1JvuviU2E1uoOmbG40sGXo74Va5JbrfK48GoAJ1dblC/kaYsW5D1Nfquq7rhWK1sBN2vfm342C5ERKEW5210WTfJfcFxJ1OpV9DHU0ZacoM3narJYIa8gmE0M1wxfjpQpso7TwxQi4udplkXfTKbMVMeXFL6SWCVW2kTjFv3ObS5CWlx7OLysi5RKHNUAGHGIiAJefVlEJhVBie17vsH7kPE2pS7EFi3BF5FLKjts1Kv1lHqC2wBvvt4saoZq1QTRQgl3W+Htc+DNiq68pskULDVpYhEDEbPKzE4EdgobQU1BYi7tJi9c1YmoYLoru5MUXcfs0r4yxGnoQ8rKT7bu4nWz6QXKJHCOhsGlSNMfbR8GOLDs2Gp2NEg3iwpKm0tIFyxJHODUuqESJppMTzymyR38eFrfjXHgLLfgXaYwD++pdTCcWD989dmls2bx2vc/Xhmyofu3b2xpv0qnZJrcPpLT4j4FVYC6uND28GRUJXjfmSbK180/BwDuuQ2sdSAUi2RV39idQF+1nEcIYIktS8Hbb0cvtUCl3B+uUw6v4XS6ExMXdrF0S3/gFUyxKyc+so4XD9Fc5ymjbiRWD2ywgzFv9hFsPmRKdGLzipbLaKTTSLAnS2eXjbDmyacZlSWDleVVOhXN/IiTYCGuyg3+EBcdDkIJSUrYHhYAUrW5sikmQnlxRILmWqDaLofvILuzjtN0nvhAt15Z0kxzGYbimiIVv7rDah9okmninb+XHrCtcFLhXv0RVMFdn6l3LtKvCFxWxBueuDNsiP/AMLSxof35EThZPRxP7seguWcucp9Sh7/obh9wuQD+zNq0Su+HkeCjSlceV7vZlPrwT7wfxEFs8sbu3SG2xdjNu+es6wtdwal2o8oijgKbp9AMLF8LbRMx46gt+5uSfthS2o9aMXG5+k21p+9aeSKpoUu7arBusdpF2+ArqUPpSq9cN+/f0jBkVKirCsY3aIwai5CY/RNF3lWsM2DaQaCfqcr9eQYNx3uXDSYJiFjY0WqY/pNKn95M3n3HQLhLwflHoHdkjyOWlWisns3BDhZiV0gvDsDp3THkbx9L4Sgasaz2UZIn1rbodUjLu68U1SnK/mlBIkPJRtYH7ZN8tVMXRmqiYtUeGPCjhLJ5cazygUkF5khnXyr5pNtOrLa4qhgnCiwh0/vdSFnXz/pu8cezz3AsgzHPHge/fdbMz6r01sSMHD8f6C1ZOoe+F9yGzm9nPjekRNLhYgPtwor+oHY2laaVLoeuTcpzYJYRxQmOXNsuoa6snyrBdyrDAKeIbGX88ek0r12JaF/+9+02OKaEvt6IdSUdzrTAnlVCoJwBPHN/iiblgNcM17C6HfFF+Gp70g2atXjUyhabTpQ5oy2CVdZetBnhAdYzEoXwRoyDEyuLwLWN3HgifHYJvQKxrM9pPY94rW7rF/W1aB4sLlC2zoiPSc65DF0La5DfqxkRTs0i2fXYpXMErkMu5JwuO9gS+51IsXjF7USepiWR8dR7P3qalRc0Qksi9u/raqB9GXYGeNxUJwRbAh+8wHov31megxZwwpEO6frzHTovCvQq/WIsaK4pzSzK5KtZOK9LMe601FbpEGDXxy/e4pae7z1j8MUe9qCxEaymS/L/lPE/K+Pz9qgScZFcxszTn5ArSUmWi7JLK5Vl+Sfo+v9R3BUC/hfirsj/KO6K/P8Vd4X/N467WvR/eiM5R87CswLhQYctqeu+AEjXDc5SmsXRh3H4KX8p/2NF17HmQmbul4nR9VGKMWVrY03F5SbQXgmElr341E1atSrAIxC8+E08xL2yXmssJAAARq+RNq51L8bBL+BAUA7neXahsPFZr/aAFhS98OcoUgcq+gxGnhMxDU4kaft+CyBD2RT5jjPJEqJAEyFJmaSolblL0lRIYWS/Y1JUQLJ3nCYHM9dvvydb1qyoQTiS/d50hXPGY02XtNk0bhzlkU2KJPaWXxBkJFkSA/ra7V2CIiXJ0OAK/E7pAAvFf/7F4zcizThrQwT56UX8OPbHnJ/cqFcLdn/sjlboZ6abEftO5PbTHOax18zBHDImtZjgrhtfuAaNmgfHMH1QC2a0jpSsJ+cbp7gD5bC1gyiCVLWdTpGU5OyMkgbMF8gpaxJpwlL93mzgRLbQKnEbXUrl+9OnT/F7gYYLpMgiRcZd2YBWubvZEuwVecgWw10/THc2REDKjKnRVa6ThiVpiz5usguakCqvfq5TAUhe+fJauY8m4Vn7Mxzg0XVwr1yfpGwz2buOzIdQqptrUmefEa+RtaxN6ektuXJyJJFkJsywAh7+Yfg/HhzQN5qkvOlQIE/ewLoq+VJ9iqZ1qK5ZnXY55PL1bi3t39sjztA81UEijiRLPrVvNYfBfN4ZkaGERnGhXxXE/Te+hLQW/FXHwzR/3mo/57HFQ+RSctzjEC4i1XgLeD/06IjcrgpCC32H1P4oBwsqo4JzlU52GmXJuYe7D6NyyukJGAx6g1oJRHEtMSju74yQbkkhqXoajJ9F2DmxcuR773NNHott7UhB4vbAxnCkW+vXUoY/3RNH0AwYagy6SycjrerRMWftunsan9Pn4CFCjUZGeSUvXk6e6wACl2IrsEc2DWBfCwmUJ9X2MZgSGH0kG4kZUMmKn8cl/ByP1D7yU6J/p7XuUF/BXKMC7bYzgTHpVnCSzW9M70nHwRoBsiLreNfLBULlXugXt5+atrZhUIKU+4/nmwlLo3ywoCfUXmuMYpacO9uY0HYpQjCcKOHjQFsQnW9WziZTvrCRaBWHDY7pi0Uo1WHvdZD6qC/2LrHe+06cQLGvaYjG4ycnUTDYkwseoyFK4qzrxW9nAG8jVb1aOEXeBMfCqLPkixCgQxj5Yk9nrIm32vB4dnzOfMy4+mTCEMJT82q50MTx95+a/GxsL4Eoh1n2jOmD8bbvDbLr/tR9iALFpoymry9vk8sFBktFvREsNHivlGnz89Dhp1eyHfu9WqwvnlfyjIleREjf0wzL9MWFVAno6Y8n11da3uW73EiaFvypJcZLpo8UvUz8Le8qpZoaQIrl7nJzsO7D5JXm7J85KhH1la6SZ0waKX1XJg0x1xqSwHcWFR4wzNUXgvtoHs4yMxqUETyNoLrwjuMzY2mG0x09r35cX+RphRm8vnDu5u5078WbPyRdd6OREORRKt9UxUtYtxWIyjpwFEW8iMcAzZwRRcgJFTLU6fncVpJlpfRBb4OnVy1N5rrUUniYLXG/2w3Yf+4L733AraQm80Q6Cq6MA3yw80ACFVlZVNEBxSA3KIfKLMU651+hLBCTO3YSKdVhz0xQ1Cc9U0toEVW8SJm+Su5xJgG9fSiWqtnjq8wXVLRlbFxPmiVXWeGoMrweAT1aZgrumepNAS+BY/IJMS1JbtPiw5GUloJ80aPa0hxLuP/9PRTQoSwQtjQVWTYih3izoXbl9j5pf2FTzgTeSm9tul47wpUzob+6S7/hlekrm7aZX/Gx+KPTplzjBsQ8uYR6Fxh4e1I4YJWbVw5tU68BSi3AS5XInAZZojTSASDtSNjxOwPHLuds3u8chb9hLh/XleWYBIe5xrQNn0+l7QELyBfuRkyAU+v91Ea8wR4NfwJ9pCiyuoSox6tM4hTUFOWVfoQL5Vi3ePIRhnHENmXbRdsOq67o7zNiSmtE9oGZHKbFF4NFPdIXlUlsC5kjnfLT3sJaXDesYPigMiIbuOVHmJzPfjo5YRLz5pEmZc/fpgkPvZVJie6zs0E5Tyd7J+PcwNY7Tulq0iLTseQ7OBxTqfgihfv5Wiq0WyaXspk9ruon+/PSowkOU/aiYn9h4COcTB0M+QoIJtcbQy2Li6+g4kDyHUagdOGeX1FpRlEU+jUtyVbo88g67OUg5CUPBK2h7ovQHagNDFLQeWSJLw7Cm2hI97iSedQhgZWxWrexVC17psp/G4ucCi6NHrAMWXIywN+rRRXZoLYps7kvQCacztO7ZE2ilqgp+mUjylnTxBkzp00oE7mR9CszQSicR01Zms/n4bUUQsoux1Z8/ZqNfPWXYGbBHUq0znHbkZxos2LjKKfShxkfIv2mhj9sAGFKyVxlVfJmgmT8fVXuYY4RW55IlPrOxSKDZ3fOd/aUqfUDrOpD9WjSYgSy1r7Ypjmlc2RjYVN+Jn6GCeCPd+TdNDNLdUon0yR4LPiHlx1eEbjV6as7jRwrucvKHHVe17r4fWlBUAzy/vkIWmrtr0lxaX/flXeuIpO1UHyfn2BPyappOLnVuIuusjJ+7a5Wnjz54Y4PL21Csu98x79QB23S/+zu7CkzUVtSsUf3YN7Xay351WdmZ/yIiloYwljX2LMB9m6LTMvd9xl3KuUgqP5sOBoi2RcsQr1oo+2w5M12tNhePOVYBuAGudWAaUNGfXARPTDSpjQ8fIS8ePmujKnf95q8FnUzRZNbzBfBvsOvyuHnA2RLkrrJL2na5CpKXBT8HOoziFu/xCtNMvYGBpqSPfGWhXF7u9f0l9ghbwU7Do5yikNC/zJFN/FRaikzmQ1p4BA57auAqMRjfHU7JCJwBQOoorQmQd42GwcvAp3KWcDSpTNhwcQhwb6rLNcSfXcHzB9a9LdgCCvIiGJSt4zBxxi4L6xYj+DBWyqTzLUrnW5/YPeFmERhs2IYHKwgAHVsIVW6JdcqlKK5JdML9YlScauy1M2qsWvNb0lW3nzE8lavkdD43bWLNMqmfLXERoolV4KvTQvv3K5Yk77ieiTXSJHMWyXDzXNJXuxaJONJ1Z5nk3n5Smg0Ji16nkrVkqcK1Uix8t6/jGLpnRMga8p3zFdj/p+6/sd1xQCFChmbyZZnO/TtzpRSsuU0QEJe+WL3GCgfIMefs4sA+i4sCn3m3MxedipDyDB6rmtXf7/FiaIHU2JpgZ1fy7uDA0wyWiGwwXfGZP725gcU0ELu5mMZNiWOA73h+z/2z3btIfoBzGtTeI4NinufAupmDkmWlro2ZRhC6PYoxjBzbL8lXlyXgjYBndviW/ivV7FYJAdLI45Fsk37Y4u2hQlE7TtQOF/hmivn/vfJv/8+DhcJefraJFn03T9n+Vy1zofeinQBL06POM5k+gWjY1rUKs5y8+G+nfUBEVuZIOXBuRiEe9NIVOXS4u8bg4YaVxeFAnMR6ThNU8XBAePD5+VX0f1rqP7hkWroqGtZPynISVDhbxGpIuesrybqCo+xvoMflIHSYmkirdQXDWEZCVg28O/lJQWfJjceUvfMUeSEJh370/3aTo1CAWiW5X/iy5mc7x0qCgT3/aUjPdJwtUdOYm75aI82ud8Gd/BhTXVS+vB3+Dg4grzu0QcvrhP4lRpnbmXcL0rtVZDojzB56qM+aEUhOdVyGeO9oo5Ff1vVMFebCQV45psVun5o9MVwy+Jn7v3u46TsVRcZdlj6i9NV7FVc1miab6ri+QWqOB/qbvL7lgG/TAhNEIahvfRhwr5jFQGXrL7JPrfbTo+axNXCyhg3Z9v3VS6fO3PuOqbP8rFvgu3/bu/KmhRFtvCvMeLOQ3eA7I/JIqICigvgG7sgCLIo8OsnE8uaKsuanpnbPdH3zlRFVAG5wTlfnjVJxpd0WvaeGHuLBDkgri1G68m8SkyMn4FenHRxusgWWUUWu1ASL+72XPjUSoM+TQtVpwrOtVX2VNza+Q4fy0omE0wN5JUKesuhCS3zZvzYKRf7KaERJc4sieRyCVFUfEbpVmFN60jtU9l2DzsosYWO6Jmy3R+v0gztbSGwE6U/NfJ5C62PXgJrN+8OCIMHPWsjPj7AO2S11faYIiCKRLg7Ca7krpVoW52H8WnfmJWJEVOHZrcttElIGnk2OPNgli7MY0lZsdIZrWoRxMZ2ai1vOptXzjtWSHQXo1O8PBoJldRrVaba2tvHnlHNYinFwmnPVtrU2K509Mrort4X60NtzqsC0TmAlpBeWvOjSTKxGXVJo5dTD2UcbS2RQTK3fLTsxjJb6Bfak6NrYIJmWVoTScbq3KZUxK6xjaxr09KORKlTSxRTR5hzkS9ECFhbzg4yIpJigZ0QT3R7bItdnJklDS1PywaKYq5Ww04Qa3MIIG/1fXn317m+9q5dgTlXYc+TJXViG1DVUIyi7Jl2jtxjJuu6vGsor9lasZ7UYmxyy5WVzK6M1fFr2rcFm64Xocfi/qntzLM5WybzSjJA0kqmPe7bFdnOJqyw0ZZGKmPj3ZQl5IkreAevDvHbw0B0pWA6CfXL7rxld8hHsaqleiIMsl7SPTCXEE7jDcYtNyqGV/a84jNDxURVxemwP+KCM2cE5ZSSwPO5tjVIWk2mXRBPmFo5eRsMGpt6XzG6cdXZvr906c5JyEsJTZ1+pZ/UXJN2iizZ4XFSollFWTojngcf0tBLSBqJVhfR1emuNpKI1knZbzdHanZuyqMUgkkqAJ+dJuaWv/l9Fj2spC46CtDTfJ+WqjVuOIxqdXxj5XP8vEmxYAVrOAtSz6JKqGJHM2uT8bOeInIoRwlj466RgcVQPMEl9ljfbHEN5dmmDnFYznsiUq8FDXFSrSKI8mIpwek/Deimha5+XLu2vBWzyJ3r2ZpDJrG2S7E9hZzVwONnyzHOSXYcnMudUmeanIR5hzMoynqgfcCutwt6y2ZKpM5kRyabdVzLhyS9LJcgj7dsmUr72fCKk7pIycZlOdZGe8GcFiZLHdzZVd6fGUaDrruLdAneoj39tkR3QKsGErRIDZs4Ywaazmrsh/Iq0DqkN3tj2s3TgNi5fooBH8Rxfu0ZTvP7VcPbUJ5nlupK9MlLMCOE5B/3bm7SdECFpG9Q/GQil2I+lQ7KAg8YDEXfsP5CzKmiCSl/7AbnYuNkgjErrBCjvAzf8Cyo8rWzMVisj3xJWE6KPZw1vYK1C84WaQPnTtaVlyJ+v0893Pf5HPAT4TIz9/1a3xgHApCeGZV01ADVWF9Xti43XKurl3Zf86exT6b9ileMyJxIsrtydPtEtqk/HosN4QiXsx6BmRIIsC70FrkZmqLzeiqumjl0PBH6eJ1rmBM4gvlciNNwatO3HOrUJgIRLZyG1YNwfgXFuUHnpyjZN0nlNP0in3NFACaz7dVCsVfXiDDnjF8UQen7bkidX8B6b9YYtEnjXMS1qWicSzfItI7x6TN/dDEVqsSgdn0hqnxdvJwXNb+GVDb7Judl8XKYodev55ImwaloigbEnTsrYnulgYW0OmPsph3qJXP34HDUGnc3at2xq0BnYj1S1oyX9tAPjzqgLJEskwzCM0sHb8K25Z2mBXD6XqykQIu+ckY/eoUGbZ8aevdtv1vprNl6QIm1dU7VWO63Mpboa2lCkQeotaP6wmLz/bTLUvcQ6Ujd2VP0GnpE7oAAdH5FIFsiwcZukvH7hEniUr1IVVFvtNkxxSmbVS4nFKGdcQ2rnxUQCUeFxOUsPG6BIFK+ollGuwIKjxeaWqrFFYDvHJUuJnLOtqwQCatwUfLnTkUOOO9HV8PrDPSafehef2RGB3qi7zI6NPcko4M/y+jgPyqjQ37M6Ej0iKNGPIYOWHEEpJEET8GIIz4ke+BzwzvkD3UGBxVxeFjVZX4M7kmcU35COaAQKqOHS85LKseD1AzKJzmeLPZ9NAx/PcR1sC4cD415LR2U+hkyRSjnM2R5wvxUv2xOPH49f7nJJzvx/vlE3Jh7n4ijPrKNe8K1H/b6I/2EacyIFxCLIK+AOOLYfyivKIb8Sn2TWwz+N3KLecKt24QiEdvgX/BP5Rb5kOKmn/CKZv5GXnHfTnAHJx+gvcsRiVOnqmLvPZ8eaQapU3YWIigE5sup/VJ3OBHbF2rfzrqXs0/JW+VN6QXfztLXThkF9bf3Fw/8d7usf2TWG2ZQT8Tc/VoZpE4dX97vzf6MQy8jLPMYPtnnypF+YPLtuV9avd1L/aEjZvy+I+oRLTfCfOhoAMzrY/91DN119TsQ0SmaztBEoqN6YO7tQlU4p3fwos8N2nOe926TGiC6Ru5/UJocdgtvCHt3+MtofMMKhmD3JXSyOO1uzWBfTlYMhQRBwv9ZUJbxNXDqAxQLj4WvfX4oKRBpq6CMwz/RCLK7jGLnT7So4wyt5MNOwRU9c54hwvzh1lVd5WhRx2cNXu7/La2qYY4iSuHMV6poH0pvHEHFp7zMnPS1OA1qKFe/QM55MRzyWRUkvL+8yGEwNAnr94UxFLJoWqNS7M3YQ2FdOqcqhF3eO4dy/V7hmpf++7HfNndfl9F8eQDQmKJeifFw/Mv70f3Ay0vntkrnw/B+XBWp84Kw+JTGb8rCNHfqt23uWL6Dfvz1DnuU7x2Q/+9s+Nlnw1+F1CPzB1OHH/Hk4FZII0AhK4hlRwA6GtyI40YA+iKY53gogv+7MEGxut+uPTecntk2v6Okv4ct86C/KJr66Nw9cxN+2Go9/A9sk/L/Y82Mfypr5pXTdzQ8cvmPWjP4A6xeYfZ3WTPPvkLzr7j+WcX1/7Dx8oOtjw82OP51CHXddRJHj3hM/ETJfKKPvovu+XwB9GT4+T7qafyonp6tJqefCMRHefNX1NNS3KbJVO4iaYybAhDODCk++7wVsgioERBGEjmEs5jhymTEw4PJcAXMnIsjo++OvfKz/M3EgK3EEQebsyN427Cre6tbC9gZRyDL4+eMtnwChPvgT2Ixb7DCD7+vWPkAjCfw+TxO/bDjG4l/xMrr2wn/ZVwGZV9eP7N2U1q/fayOkH4F \ No newline at end of file diff --git a/docs/database/Redis/images/缓存读写策略/cache-aside-read.png b/docs/database/Redis/images/缓存读写策略/cache-aside-read.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b9589d6d7814b49aef01013b7ce61d38b304db GIT binary patch literal 72152 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 \ No newline at end of file diff --git a/docs/database/Redis/images/缓存读写策略/cache-aside-write.png b/docs/database/Redis/images/缓存读写策略/cache-aside-write.png new file mode 100644 index 0000000000000000000000000000000000000000..c976cc99b912f4ce1049482ff6bf27d6817e60e6 GIT binary patch literal 58777 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 literal 0 HcmV?d00001 diff --git a/docs/database/Redis/some-concepts-of-caching.md b/docs/database/Redis/some-concepts-of-caching.md index fb5730f5..327af9f1 100644 --- a/docs/database/Redis/some-concepts-of-caching.md +++ b/docs/database/Redis/some-concepts-of-caching.md @@ -92,13 +92,62 @@ _那本地缓存的方案有哪些呢?且听 Guide 给你来说一说。_ #### 5.1. Cache Aside Pattern(旁路缓存模式) -1. 写:更新 DB,然后直接删除 cache 。 -2. 读:从 cache 中读取数据,读取到就直接返回,读取不到的话,就从 DB 中取数据返回,然后再把数据放到 cache 中。 - -Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。另外,Cache Aside Pattern 有首次请求数据一定不在 cache 的问题,对于热点数据可以提前放入缓存中。 - **Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。** +Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。 + +下面我们来看一下这个策略模式下的缓存读写步骤。 + +**写** : + +- 先更新 DB +- 然后直接删除 cache 。 + +简单画了一张图帮助大家理解写的步骤。 + +![cache-aside-write](images/缓存读写策略/cache-aside-write.png) + +**读** : + +- 从 cache 中读取数据,读取到就直接返回 +- cache中读取不到的话,就从 DB 中读取数据返回 +- 再把数据放到 cache 中。 + +简单画了一张图帮助大家理解读的步骤。 + +![cache-aside-read](images/缓存读写策略/cache-aside-read.png) + + + +你仅仅了解了上面这些内容的话是远远不够的,我们还要搞懂其中的原理。 + +比如说面试官很可能会追问:“**在写数据的过程中,可以先删除缓存,后更新数据库么?**” + +**答案:** 那肯定是不行的!因为这样可能会造成**数据库和缓存数据不一致**的问题。为什么呢?比如说请求1 先写数据A,请求2随后读数据A的话就很有可能产生数据不一致性的问题。这个过程可以简单描述为: + +> 请求1先把缓存中的A数据删除 -> 请求2从数据库中读取数据->请求1再把数据库中的A数据更新。 + +当你这样回答之后,面试官可能会紧接着就追问:“**在写数据的过程中,先更新数据库,后删除缓存就没有问题了么?**” + +**答案:** 理论上来说还是可能会出现数据不一致性的问题,不过概率非常小,因为缓存的写入速度是比数据库的写入速度快很多! + +比如请求1先读数据 A,请求2随后写数据A,并且数据库A不在缓存中的话也有可能产生数据不一致性的问题。这个过程可以简单描述为: + +> 请求1从DB读数据A->请求2写更新数据 A 到数据库并把删除缓存中的A数据->请求1将数据库A写入缓存。 + +现在我们再来分析一下 **Cache Aside Pattern 的缺陷**。 + +**缺陷1:首次请求数据一定不在 cache 的问题** + +解决办法:可以将热点数据可以提前放入缓存中。 + +**缺陷2:写操作比较频繁的话导致缓存中的数据会被频繁被删除,这样会影响缓存命中率 。** + +解决办法: + +- 数据库和缓存数据强一致场景 :更新数据的时候同样更新缓存,不过我们需要加一个锁/分布式锁来保证更新缓存的时候不存在线程安全问题。 +- 可以短暂地允许数据库和缓存数据不一致的场景 :更新数据的时候同样更新缓存,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。 + #### 5.2. Read/Write Through Pattern(读写穿透) Read/Write Through 套路是:服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。 From ca0ac16cff37d7a085d58c22a74fe619136f1dc9 Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 21 Nov 2020 18:48:25 +0800 Subject: [PATCH 02/22] Update some-concepts-of-caching.md --- docs/database/Redis/some-concepts-of-caching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/database/Redis/some-concepts-of-caching.md b/docs/database/Redis/some-concepts-of-caching.md index 327af9f1..fd4f960b 100644 --- a/docs/database/Redis/some-concepts-of-caching.md +++ b/docs/database/Redis/some-concepts-of-caching.md @@ -69,7 +69,7 @@ _那本地缓存的方案有哪些呢?且听 Guide 给你来说一说。_ 本地的缓存的优势非常明显:**低依赖**、**轻量**、**简单**、**成本低**。 -但是,本地缓存 +但是,本地缓存存在下面这些缺陷: 1. **本地缓存对分布式架构支持不友好**,比如同一个相同的服务部署在多台机器上的时候,各个服务之间的缓存是无法共享的,因为本地缓存只在当前机器上有。 2. **本地缓存容量受服务部署所在的机器限制明显。** 如果当前系统服务所耗费的内存多,那么本地缓存可用的容量就很少。 @@ -80,7 +80,7 @@ _那本地缓存的方案有哪些呢?且听 Guide 给你来说一说。_ ![集中式缓存架构](./images/redis-all/集中式缓存架构.png) -2. + 使用分布式缓存之后,缓存部署在一台单独的服务器上,即使同一个相同的服务部署在再多机器上,也是使用的同一份缓存。 并且,单独的分布式缓存服务的性能、容量和提供的功能都要更加强大。 From 5451ef9557bde3028412e6565fe6209017bd197a Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 22 Nov 2020 15:26:07 +0800 Subject: [PATCH 03/22] =?UTF-8?q?=E7=BC=93=E5=AD=98=E8=AF=BB=E5=86=99?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cache-aside-write.drawio | 2 +- .../缓存读写策略/read-through.drawio | 1 + .../缓存读写策略/read-through.png | Bin 0 -> 56541 bytes .../缓存读写策略/write-through.drawio | 1 + .../缓存读写策略/write-through.png | Bin 0 -> 63069 bytes .../Redis/some-concepts-of-caching.md | 56 ++++++++++++------ 6 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 docs/database/Redis/images/缓存读写策略/read-through.drawio create mode 100644 docs/database/Redis/images/缓存读写策略/read-through.png create mode 100644 docs/database/Redis/images/缓存读写策略/write-through.drawio create mode 100644 docs/database/Redis/images/缓存读写策略/write-through.png diff --git a/docs/database/Redis/images/缓存读写策略/cache-aside-write.drawio b/docs/database/Redis/images/缓存读写策略/cache-aside-write.drawio index 62f3ee73..6fddf10f 100644 --- a/docs/database/Redis/images/缓存读写策略/cache-aside-write.drawio +++ b/docs/database/Redis/images/缓存读写策略/cache-aside-write.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/database/Redis/images/缓存读写策略/read-through.drawio b/docs/database/Redis/images/缓存读写策略/read-through.drawio new file mode 100644 index 00000000..7f7bfd71 --- /dev/null +++ b/docs/database/Redis/images/缓存读写策略/read-through.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/database/Redis/images/缓存读写策略/read-through.png b/docs/database/Redis/images/缓存读写策略/read-through.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f457c7490d10907baa89f5786aa57faf2de3f4 GIT binary patch literal 56541 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 literal 0 HcmV?d00001 diff --git a/docs/database/Redis/images/缓存读写策略/write-through.drawio b/docs/database/Redis/images/缓存读写策略/write-through.drawio new file mode 100644 index 00000000..be5c87df --- /dev/null +++ b/docs/database/Redis/images/缓存读写策略/write-through.drawio @@ -0,0 +1 @@ +7LzXsuvIkiX4NWk281Bt0AAfobXWeGmDIrTW+PoG9sm8om7eriqbqp6xnj6CBAMI6R7Ll3s4+RtMdyc/x2OpDlne/gYB2fkbzPwGQeAHhp+3t+T6VfIBgF8FxVxlvz/01wK7uvPfC/94bKuyfPm7B9dhaNdq/PvCdOj7PF3/riye5+H4+8e+Q/v3vY5xkf9DgZ3G7T+W+lW2lr9KCQj/a7mQV0X5R88g9vl1p4v/ePj3mSxlnA3H3xTB7G8wPQ/D+uuqO+m8fRfvj3X5VY/7J3f/MrA579d/T4WzDRMIJQJbnjPYAxINz4F/AX9vZo/b7fcZ/wZh7dMgtYxx/w57vX5fC2za3rFS6dAO828w+dyci+T/Qp8mnp7p5/XvLv/v9xqmfha9X//lG3dVe/2q9rQVd+PPTRhGnvcun+fqyJ8ly+d/uPmXNv/hzri+A8zn6vsfqFTkw1xU8X+gxlp1jwpCQJ8f75yH7l2Yf3ftZV2GvvjnFX4f/9+u1fKzDd6VAvH/ho7nv7r7SyLv7X6Yu7j9y+02X9d8/pdHcmn1dPlnj6z5uf5L3FZF/+t2m3/Xv79Z9dmPRr13gb/p++fmOsf98n2a/KPxPv/LA8cwZ3/f9z9Uz/J0mOO1Gvo/qZ9Vy9jGv6tI1bfV39z7tkO8/m2dP5TxuSp+f//R2uSPAvC//caivxHPP+I3Fvvtw/1Goi9OxGmZ/8Zyv1H0bwT969PTCYv8RhG/kczvFwTzVn4+foj34kP/Rj4X+G8f6jcKeZsj2Le5t90/Sj7YbxTA/HUc878e2bMzkz8p+7XN/iiG/m7HQe+iPeVHWa25/azsW3w8QPuUlWvXPp/A5/LVit+R82e92jjJWypOm2Ietj6jf+3Xpz2Y+/nzl57+Fjz+AIJ8fjr9m6LfwYTPhy5f5+t55C/Y/juw/Y7sGPr75+OvOPmXZ8q/wUji97L4d2gu/tL0X9HrufgdwP4czAzGbWuBvwoWAn2apCccYf7lT7DslwqQ9I9c6d8++E/JI338dx34kFK8x/xrZf5EdG8t5hU/++gE8Db1R61fNV7dgH8U688F9zdCWtZ5aPI/ZPGjxI/kqrb9V0W/700mfSTzgCFMvRKpHoNE/n6jq7Ls7eZPteJH4Pm7SP8TRfij83+lNu/nv9EV6ufvf46uwDD839C/0xYE/0dtgYA/0RboP0FbMtZsP+1/j+a9S5j/nq81UdR/pi3/Worvso3/ZK5/oRxx8sfjwD9ZqX+6LBD891sIxv5kC0F/sigg8p+wKn9OCP7tVXmIzPheVt0Pd/qLgiqvthnDUv3CdyYZ1nXo/qd49P358ydKvg6vNsfL+IvTfavzVWrqp0vyj1Lgj5LnOovX+LEPvz5C3PhaXLryKN06AJkvBvL5o9luybrFc6W+L4xIk+HzTq++jOXPhbsCLWt6FhJsUEZ/7d8gCgIdYcctGzEnBdMiG4gt2koHcDSvqKsw2d04vmRFlw/0RLNKxbZ7u1BHF/aOqAHN5soooAFmOCyb+JkPaOwfPFjxhz2+2P/8y3+9LcRzQX3ufteJ6OcmBcJ78LzhO/G8Rujns29fdF8I9P70jBTZNk2btH7yiMXLznu9nZxYbE7WmFVKDmxja0heuaQt6U8DlKXSvMmgVKKU7QSwpi2KqrqyqEMttG2RSbK2E0vaT7GmZiTulA1pn2KUrOXAFrYjipSeHbj5U4xE8Uo1bEE7imjp6ZGYRWP6108xy1Y0wyiW7h4J2TQmD+FRXJJs8xQ7gqkDSESyi837eBhTIttcNOn0qQ6Ib3HO+7MZUSLZXBfr9CoPiBLLLdtbbFFiURwX4LQqf0gSS60b5A8mJT3FwAkwq86blMKW7QbxhU1JalGw6KNJ9FssvJPmTZuU1KVk0Ztaadr6t9eCBx7bTBWxnVTBSIzytujGzbr93uzmV8dx9Ht99odKcjGy2x6FLfgns+1MzLuZrjn92YLUvH0v52N+O8Jd5eTRSs7uukp951UlSKvY9XQ3Os83NfLc83ZQTwJixmLfDp4+wUjJgbj+PvUooqMt8T6dY8Rb8m3Zrc5nw3PK8795/ltKMyIdlrjnca6BfSqsseeB0hBKZfBgVnue/zyFTmK6zNMeXYc6OaKSSN+EfqpTQI053H6j0wMB1HIybY3O8G6IenMxtzSSsMsQBWbvvZbvHbYSqyW0pXZGYNIUdqQNbO9hYpp8xhbOnn7A8CPnbQ17fVSElPQO8LKI6BIE8Jt9t2mY7zEAXLbbfTTw6hDUiu3ge1EngutIiDRxgOnCP2jaX5GefJLqqkexOAEinKHpK+cdJqOrMeEdgefSSEwfnwq/sVK0F7HcuadJt8TBo0tnnxOvc7epaavGWlEi2e1brQQL2d/OeLpU390nP1MOPqJMqUkdAo/qCIhRvzAi5v2d88/VvJmodLNmM9GBYAaEMUN00DJfyqY+wIxZTbPzJ+RIYgkobrsLBsjrfEK8C4GKxDhZi9VlokQslfeKrK2ro6T5nCQ+SVhjEHLjyCtitQ0KJ6monepzX1lvNIiDmunb7Gkj1X4BwzVNaAhbbcooREz4mrzyZ8XT9/Btq1cfXnC59+qyPjNm4jYhlcscE3N0cA+qQ9YNTwLaFBu3Fx7oOd+Gtfu3ygCSPV5yq7hNW3OBzkTiLkH4SEd7X2zwLbdYzwRo1enurTUsD/BVuYmTtI/Tdi5Y7lFoh6/qDEnZ97Zqo2psx4snrHTCA8Gm7OmcXdiXZ5+HfL8ZoquznktLVEoMvhPEQ3YNJ9VXU1zsCKYNe7bfA7F9sF5zCOSocYGy8gitjBibBrkyXvK+E/Rg1/G1zknj8TqVjevuwHl0+bV+dAbHQ1LZVNAAJs8qWF1S+2F6gixvPbUvKYfh2GekeXpuwoqW1quvKCttY+kenv0MGkZvm1ZWLu18fZT5m3Fyfnr3wzrDlHjHHu4CZLbolIVNhjqAj7C8ATi2cyQTBiqeTFplnAa85r4KZn7EWyzNdaB1WxKIDUsXn2cNR2nS4mIe0GgfK9OYIVxrIghKE6SYzySMuL5n1HjsPUdTWRAP0QNu7AULNi69+7nprdu2MoQLgvfxLm3TuB64WNxEnAGhll9feGKdUqOithCtEoph+kvXUx1b6uk6yS8DJDRLIWKR8Fy2obXzBhpTVyc4Iym0hXrjP+P3V6ne2QGL39E0oepQaKU2fQZHkKqoum/TX1FuDNRia6UVgsoZsxLhhCTXfH7+rLE1Z/fJt9DTrkQPAVHP3tfhMxfMTV0zWsBeTtTPtr7ArUlWClRjpLTsbWOkbNv6EEchCWKF67xDZaGVHidO2V8tFwr/s9bAwy5IK7padommvR3MRxW+5nkqc6O7iiSw17fqBVF7MMxdUjx5POXHQCBZMJdlzbZAKgEBwdIhUDgHgMDvUhImfCWrF9Mm6UA8RdbQ5OEmUuIUhQ0fF7vuo0M2r5OF9tSXxH3sv8icHOwqbcnYjk7XF748DaWIvgzvxiyMmphhYRDfDy/mnvdjxC6MG+TjNTSUWmAiqITms9O54cVkTK5q4+FTC8TDdMvHcPudwBl7uOj2oMnZEqpTEFfvuUwZEVHu1/7OKOV3rxonyykwLO2ScbbQwFr7EyESEV8sr0GrEsbSeVpFNwumEqijFHxU6tMCjZHt1j5vnWHJ7HlbBvPMpz2pPE/CDrWU2pBRY9p0+6OyUyRG/ZT6vTcN9QRBXTYD1sj629SDpOEutoMRVumc5S1ygdGWV+yybrhHpwV27Yc1TbMRJcYDY6HCxxJNoXB6tI+qgqB0aMs2WjuXKZrTIG+vPSv3wdSgjG5hi0m+QdVIu6goONdA0LY2IYdFAuHTjJ0F8Jm8b5wIzcDiWFRq9hieiCNOmntAEyj1DKlDLl+jFrQTJtlc8DLxI7HQKaVCtThRxF4C2rpwHgE391rezxgqFd4iuUuG8PtisPzsPHJyhA7R7QomkEPmEeXhC98SaENqr6KNAhl9yaLU1Iazkac8xu5d+bw6Za/1D77xRblTYisTVY9vjerfPXm8dHBZH10CRhmdV9SxVUlht+hZ5FZjtTiDPycCCp8Amd625ssIMneJyGxMl1qCSvI+qj4aj0iPu5FX9hPd7Ij28wOx2YK8urTE5Uvo8lCx22Yi1tBkgBZ52aFQXuao9GA5L5wCrbShtA8eqMHjD0OUk8mOZIARHiLp8/HFk5agtzrZXn4jRT2zUobVPBDBba5Hl3iq00z10cbZLS69bXefuFJerNuGMJ9tM19D2/WBGeWcrsD0BLZg2yTwY0KSSsYDrDXHBLPzGBLJeqNKe51sdhkuhh/ePVTypjH3NskampceC0Rik6XoL1WX7JLAoRCPKV3o3qXEJbB57WGjKNoo3yiat9o2V1eGKMXEdoUvv5gKEbEfmh/vOj9OpAeCXFFaXnbTbshx1sG2DrxaaX/EPjORaX6u+aRN5e1jmqVS0PtDNstr+Aw77sn4YaLmKYGw2HFQcL2uGLqwaW4yiLQBc2VNiKbFlxa9ozrjDKxIEf9IaAgEOtiUUfrpKMbEPixhXgGYLqaXsDhKSS9cqKtdnGtfxuYHOvf1dsWj29BYyM7v2mL6yzTCVx7IyZ1HZYaIThxhm4hcm/LQKIyD+e4GEG4xi8ea+cFmOPGtZHrMGEeJ0mISLSVArj+3iBUgLxmluBkbjsZuzBPNsathDbj3B+1r6p+BIrnqu5GQpQrBhETuBbG+HTHDaxhkxj7Iog/KGTI0KgyhJMN0x3FAo/lFYKaHafQayoI/VCDk3cYMKLtia/i++OssJwDw7t2rm8tk7AqEuRcbrVLCH+YoON3gmmkJVMoqlDpzXh+jZmlXSld+abbBxZGvGKjzMKaFhddSyTau+ZVJ8aUrjrzFrj5wmfHKEXJEKv/y0amItyE+zxCPGXUzU2NZ3Vzs0NLywaMI24rFSdFelr+7n6YzG1SgoUN+GFb9OnFp5UDvtqgex8ssBXPrH2jgEfVhtA8tfX03PS6VJlftqret3QdF9Y6gb4PhMLtZ9+sRiCmbUywSrUx7OSJe9q/+igc8WKy9ts77HNWUSKDKIj6rZQs7Riqp1QjYaqGog0VkmP1dkdtPHPBx1rq8fzUv/+6eWPEUh23iO+7X9XjAh3qWVa8U+PrMUrkTj5F6pjtR5rmCJSXJpPCKHoIeaX5sNvIkLOybialhn/UZgK3aNiceNxR6DVswx2jBdk7Uuzaq4DO0lheDoMLKiFrnfqKxCCMdrsYac48+0kAETqM+bCoSxKUP9Lq+2771z4axTAt2600NtFKkV+qSb6rOWcvdlRSY9CJsVwWehjHHR//x5cLgXspTu8eqHSfDS+zHnlIZtM99bo8MbvdTtWaGXS9q6QDA609zKd59vqr/8WmRwnHbdnLz6OQ7tw5SBamV/b5N+C/asW0jHeukV7OaP76UPuiZh+AY4dmA6K4v/N/wmUClRHzs3C+bbwyzs61b4ccbFKK4bHrATjo3BZkxzKHdAikqb7ytOpD2pJdsncrN5WzrtNLi1dB9upPJ3Pt9GlHq3oukPms7rXOBVj43y7mToWbDQtba2a5ftKcG9N2d1z0a1ucrgR8/0I1XlJ1Mf+njj0An9aUPFtIyx6t8Q/uwC1OKuMfzCMvevY0tym1Ri6M5y/UFl3pd853TeDdmCnshLb7+pFFkhNfx9ynHowd09IdJb4FezXNTbGbV1PMY/GKkEdy/hOF72I2uT7+ea+4Hyv3H5X10mILLiGalzPTHj/9gq+TxxgZmUrGbqHpyfQLmnmV00uWLJa17uGF/C++rho6Fo3ixOSLJFl7LUItJS7xz05AFtE+rdKyUNrWneVTPkZxHX1n8vE5rSGmdAXhSkAoo/1IJer5F5PG8aDZS48c59EyggbKEYNPA/Uzd47ZSmlpxcJs5UNw3uPiA91L1N5UVbftQJkucb7X+JkszNWBU5jA1G4fEDRISb8e5aCo2xTb2oq7ZVEYA/ZhlHUOXdzQA5Jc26eZ72ogARkPviJoxgD64lAirYW0g++N39dztKKyJkpA913rfPFYdLRWFWfGBMhrA/n6q8o0NsWlMRSUC+MV8ykABZNYWdrCJ5xhpozNtXxI4t99IFr3xWN4xskTQxk9vAGzYZaw6qP54l34lOLgx8+Agmutjg+NraYqc8zb7cZHaK8p71vERD9bw0xqJ5dUdYXVqG/U3adR7CSUK6ySL13TeCW7QWSqU7AnZ5wMiEjd/SyXcbT8Qrg9tUXVFkWUpGVx5pp4fei3umiWnqAweGETYh4hgwevBvoBTKjO4YA3444lbNMb+6IS6zM6z2Ripig0GRimmo0kFdR1cYDJMIRUx1xrCo1kSkXT7BmwxSaGVfHeZ2Vez7dPSL4uzJMzhF/XjNCpNqWEfT+06hkl6i87l9WXj0t1syE3Bw2xGeDvTehgHL127NUWYSygT9aO82b6QNHCdZ71ubeahLtVH5ZVK51Gwxo1+XywAY14pn4KQGJfh+vfTxvcz7xfgxcQRDV7Guy3NsrNBuoTaKZP7ZS5BsW2vtIySMyQxdnPYwnoNTPfMFZFYOtoHV8zLW1okKAfO033aX3v1s0ZBhvVI11s79EHXx0hA+9gfZXvp0WMoHhekzbpTFEwgc2VDJUZ8GHC9X5bH4feZ4mrtezxldHzNAqRFjvuO9d6q9qWn6ouEGAJOiZtLVb5GPLBXr03CVEMxWPN82CTKlCet11zGnCHjXT42+/tKSofU2X2dBSWSFsFVjEP3IDIdhOiCGkFPWOTgRGyHz2x0uKkXp5KF0QAl4LQkKjlkN+KIPDoYrRfcJAmKdpQzZGS+aQ9XegMnAE8kVZ6k4WlT/ex2n+NOqpE1sqseqIdfTfCYGKyNcrI96Ux9eT4L5GhV4ZrQF7BfkPSGBfV+DwNt8FGB1hMXDFJxXT9xB48koced1RuW7yRy0hu1GNZ5rS4nu+tpe7Cx2NUixm/JF4EB1/bbLVTGkC/X2uRHewlcM3tRTfiDuWXXEYuKdtxnKb1MfV5J3QHgUFO/IRtPGElTHFz+0s9wf5FDq6uglvFltV77z7HslvbpqNJ9J1K9fgKljtaJpvISSXKooJ9oac/yuICoxgrmCc67tiJW+43vFCv4T7RObZOTK0cvEh+2ubaWa9/ewaAW8KWMXSggcOPaDyy4qUUjDzsJvjpEiskCoQ+7LBbstYlbn0AcaVXCNcm+WhDsKGnHEE/d+rS0FDjrD0G5n7l2hzZ1kxuikfYdfMT9IU5JaqjbO5NmZ75ps7tSDycsT2ivYVL5LIwbEC+F7hgxK2esh+F4EXW9NfbTbC4lUJxnHK2Qqx0sMPbdNHnLK5THiiclMd1xb0mw8625Fv3JQeEHkVs2i2BjQGSt1/dAM4fH2BOdbeuuI6X2AoO1/QXCcWZdExc2UdJk1VrWW5KE7weFrarVvuphimlKUk3smaN2WuyeCZ1mNo8N4XsxzDWwTN+4C+MQtn3Qx2PHXJBHBJnj36BsDvMKVr4yD7IXWMYWeIP4S/3MjLvpn+AqOdnCgNbC57EnsgulA9nn3oelemhEM2oHk9yarJ4Z3bhU2RBs9HdLXgNop/MrknqyIyl35+7rMcSXdMTImEhkWNDdiOE3lmO7nzSbWgJDJ9MiF6R08+RaJ/oWNlb1HTK5oDo2hvEYouTEjam+iwXYRSvyNr9kWQTTvigKyKwU5cq1lEfwGl13C3wo7lxGP0wEQLStd/F3NNi92B7lj1qjPg7FaNG8xlTpIies2JAEKzRSzkupcdFYJo+gY52xf2qNHD0eh/Ex03TtXSCXnRkzXrnD1OSoACIEqXJXFluM+BwpQa1O9xy6DdhnG5A3NsV1sUSDx+3gk/hlJlP88rsXblZENleGjZe56abJGA8TIrpH/hTPm3OGbpqpAjo28Yd0pyfP8QoLmFSjaNSKHrc9GzwSkXI7MORgma7kL9vXIlky+jBuZzSu5YbNUC0iQMaxi2BgyeaVIEY71VgDO3ggwNb5BUiHo8v3u6cTdQiaDyKSJRM8bvzGFZlWHfxXiAj7IelcMY4kRGuUVrwCfjzg+HlMYtdWYo7ycBqPlRsv31A6p02JjJSsuNwAnSOHsQpacLFRLENHthrB0wEWeo2oqVG7W6ZSq+v2wU5SqSpktk/z5KyPA0Ge9yk5NW1GUazaSeZkIsX3VkkHMcNzIB68zoomSitOmSlqq3KPpf1EZtiihF+g32VApBTgtgF83WPQG6Tl7DdOiSWEXs6ESFcIOCnE+vIDOnTn1NhkfH3Fz26ZapQtcn85b1QtAOJADzzQIxFabXedTpc5Q3Lk3TLdVBCSKKZUeH/o7uEc384cHL4VCmVXYqdILDPBi5/4CTZlaKN2F8e6ue+qflBdAZfYj/l8d8jzCJKguWcr07SmroD2L6kFH5Clku/zoiffAMbEUATZhtXT/TydyLRtUXIpZw9mqyKlZcPRN6ywzCJKPuT6PJ4dBZOPH5Wln6/fElHx8MMopJxXeINli/LyejT4T6VBlFh2ItF7AhGQfFykjEC/vgeEBe2JEcLZb6Xi6VHf8v2nilpIUqMO5PiCBvj26X+/xPhUYt2K9sgQAWMieU/iti3d5/itYlJyoy70+F3fczLBN4LPU8F9z9o80sVB7O0vUbZ3++6zfOk/FVJ5/GrH05sQGAE4fvmQbWzeJ92XCWBvb7OwvwT2qfKeksmFnmJrrh0GwYBhznwq75cjz6XvqSppu55uySgdiuJ7qvtnCQP/0wP4fzuL4Pr7VIB/83T8PyNn4E9Px7E/yTDBfxJC4L8mDP1/Mxfkz7I97N8H+Se5hP8PJfZHggPyR9rH38gMB/8XZnlA/+9neaDQv8ry+LNEKeTP9Bj7r9Ljf8eq/G+b5eEAzV+zPDLsgCyr5xiwOijPYYOWPj9HOFHFDs01a28XBy2qK5uv1Tiqc8LDYatCzRps/fqQmEzvoVbR5ui7nLC8/K9TlVcme4b/BKWiFo7g7+PHnxCOg879+In3GPX3dhTdyR7kurIhmdXhYauHEloqyxGZVVGKRR5mcKI8yTqnlpNsWjIHo4lCh2zrQ0ocieZ0bWZu1iAptWfu2PWf6UtLSQk5WqK0VBR5UqEgK5oqy/pIVxjqQVDsZRoamsU0KXYXK6a4L3SiT9OoLnRusVIHaUWVrH5u5nj6IAmYOyfRrEKRXM9VzKMSIaVmyBP7AljS0hoxxCHVUJ8+hCsV9LG0qaKobhaw0E4oxId6oZsyu+bbcenU8UGczEE60kFAb1yKpBPRtOAtzN8+3sllFs0yFMVt0sDcqkFaasPceeAXBf1MjhZ0sEQrrig2p0RbUTHTx06GVW2kf0zugjxo7O14Hdv75eniG5ImfjhDCcwf5T3p3hoVz87ASOHvGzKUPvsMGa/wzoGWmiIOagF+g/7OymaSB6J3DzoTAXIdJUvU4yOAIfAGUnkN5xe+ucz5C302zExscGiPyO3ysUvhZ6yfy83egEaL2OkZr7UrdjTTU7obN89UMScszYhGIZxg3ARpMHuz9yoZKVj9ZtpPpDACCg2VgQhJXfui2B7amAjta7JtipvsbGcDnZRH0bYJTVqgYDtYFajZ7Tb/dgA712GUoCGdZ+7UZeg0ZmTDQTRmk7zs3G8kM+fiIBgchB2EYxYM4PoJi3ef3l4ppbzFVMmOnSti5VkuFhEcr4t9yIGXGwGKNEqKXOlyp48htagJSWLaIJJ12TNed0EJ1NIm34g/ZyOESn6Mad4Oj7fhipcQzFqxwkZnzGQkDdyAFguTdzyRnSELFoOOkEsuHUiK/cuTehdxJN/RHd/5IwDF0n4DcEJQJDZtpMT8jhI4g8ln/9dpNqoAKBqw/KUs4ighQEZpOoASh0CoksgODc6ObG6XTYE9zsh34waIPKLPj6haEf5qIkUW5v3TFhXrYqFkZO1IGelJESu+UNDkClqGzwPYw3FBxTajt/I2NXyJmzcXyoRUnzNDtXOVSCwkILWkiqfIqs0xfRSNow9mfg/MLE0iBQM7YZpu6NNbJCyf1IebBWPm5JLWjg1pmiUiUp8OSL+coC5OXd9JVrnzGsQg8yhCbCvWqN8X8c3Nr4Mavt7wiPP5uAJOjFis20Ypi8R36Qwv3l34fOTydJe32CcaMIuACQLvYImWtQ7XtCA4UPJ6ZzhiyXmTZGQ8GulerLrzEe5iW8K+flpi42MtsvcanVM1KW0Sq2MsPQCSlvQr/YEjabY8H0ORx0p6z8KcaifNy6I7e/owHbGm3ba5spsJN3244iSTd8az9rgN+NiXdvW5aspHE2zeTtoJIdaPvM1TA5/+puEbBhb1JTWdcVG4tpmLnZrDCLfQ4bQZqBUKTsWiyXGz3OnC/vqo3Xe0h9RtPgoldNvI6jwjR86ngux6ZADIVcAtmlbWJzmpNt7Q5uCTecshjHcN235OfsWKi2cS7HGARiNm8tY45rVeL0YcLF7SlSBUiADJ7G1pumbMwsmF4jHBZmCmxbWo8KnTzNCBBEUhX3OQ+QeMHe0l2eQSfm2y4cN2btprDgKqV44wfcbgM4VE5LRdtHw9B9oqAGV20Wg6gIdEGeWd/5gbtQT7mncaLvCjmlZOxBSYUb7MT+6rnyAzTIh0ytbm908vq11ukL0obgvMsgTlKlAra/5rpmYbGa176tufU4Bvd5EG/cbvE7f4XlnTLeJsadTBEee4bR5vaO/eWB0aDWTjjqh0ir5DV+2+OZAgrp6UUvuuYDQmRMupuWvzM2etfp6rEXWvbUK0Gk5lUowmOeKDOiz/k7hEETWrLv5VA5D5AdoqCDo5cL92BqqyzhM3rdN4cn2h8s2M+KwAsLjXjT/zQx2NIXFnK9xUmCCg76FTpL5CPVPiyX++vUuT8pYwG7kqnzfrwzT7TxXOmdawDllpGfbtxCiCCIYMTuHmILmzyTEWPRxioTVr9qWbtb0wKVh+HUj7FDSxGptC9ituF+1jgKWqO5D3GEA8QUluu2Iy31tfaevOzveyRFHF/fEMw1tONJa9itgI7SN5Tz/NcwAb12F1shag96B382MapcXgKoWqLnXijZWtpEgugfJ0bKOZ2pCyLmZ2BqXObJoT6cekXDSFlL0ZSZdQWdBxmCMiUSFlL5IYjgFHhawW85NbLfIGQLFINjom7V78UXCxdbv3FKkBMTsSTZoEQdrxei8EbdddlIDQvMjwhL7g7a8meRs2VIQfl9zjuo8d57RDKbFjBIIcwz2L5QCXqRmEei1QonShZ7LZBfLOSF15Y4qy618NsLAD8TWyGXpV7z3EKnaMV1/8FyimBQBeb1WXWGfVCjkhNt4jOAetvqh43owh8nK1x5ZOizRNLW/4VEaAzZFFeML39M0nXWdtAExrKC9+gHfmI/IIcprZfJjYJ8/FfAxq0rt9m5ZUUvJ59bNA1/4q+w7J4p0ssAtjyI1zEgbu5vieAsyoA8nakYWGASaAhLwJueBPwFbEjRfFlzewocvHjJvoFxPs15//BlM1sjucYInUy1UwvpO9chTprM+bUOi+/NAuKTJ9Kc3lgwYsiOJRvAQFO77cHn7hRP1GZxMUSSTlytCu+Hx0RsoGm2lLTkIbJ6czbF/SC4FhomnrTei4N8hnn4eTUAYtsJUJla5YV3mfaDVC4waIRGw17w5HsfvpVBV92hZeiGAbf91SK/jM9oNWOuKIwz+3fjZuZ4tSYp9qoy1vIBOhaK72bsjZKmPBwppQ/VdBrQf4xs8HZSHz2QMO/ZU/gxFngPpmF3iOWdjNWZfu9SBw3+7q4eK6w9Udme6oEfqeec7o87J+KHYhKxlcbyFaQ6l7z9yTZ/P6OGZpZQu0n76VhsFC2V71K4dTbg3PzFUylKrvHj5UjHHjAX2lA4VUXBY7BTLhh40cPYSiPdTRlwBJd+dQvtyPmLDVQxitRdPokm9HMl8ValaOdy88q5kI1H3K6jdtrNYOTx3+pGxdBRqPglsc5ErC2W9tVZFuGN7feHBcESnwwFcqWtJptFuv8T24DGmThMNhEGLFIn0ro28KDQP1w91b+NgWnYlFoNr4WfqpSM0K55HX2e80Fm7Njv3xtcSEWYIbaqzwpYRhiT7smCrCr1kqjfJGtfKjdUcsuOxs5AAgYJZ++X7ZwBG727INnch5c6Jq+h78GuZhnLWJ3TbBEbpv+OE1i3EsEfWhekNTgWJLJzbljklGbCLxX9OptIBPsjLVc0mRaS770pzcr5sRuRHKOwYfWfZyzA9AV/Uzo4/CHKkHP1J+pxJJxiggoJTqwuShPhO275WwomlPfChS4YVZIOKRps/e6zBN95EU7gpGIhWWLRM7EmNXQjIV52XJEsN7BUJdFAMuNiUpjkbFFY+7HdFUvYeXB/+GUDukOWf6jYyNLmR+59Kjj0AgYpG6B6zkGGJoa43ALjFnPDoNakTaBSqTtK7oDht3vFX4ySNqeLDjVuVrbbgBqdA3OOWb0lv/4exXOjz4K7HZog0EU3HmG2k0PTu4vH42zs+LFgYr39LiBB5P6Q0RbwbAYyJb9EwaT/He31p5WJk52xvT6bTGYmaWwXhoVm4kxBLU5mmD0jCf6QgiNZ7NPVoHG7QRv/HdaEkv6LG37EDNvlNszGAgD6j7tky9WcXxtn6nOH9XM1MrteTUxqIJ8raWtkGUhcUnd91Es0xmBhgN1uw03V/EyyD5UvUdhYOHMKjzeqjLixTPZyZMY41SahMoSgYtAkYc63Glrh7VHTYBKTE0Kz6O7Lfc2JwFDJ4dRwhUCyWN54dOcN0X5nuFYhvyW5VU2D62XRwxn8ukWPtE16UdbpMC9ZhGExTTEk/lv/AIjcV0YKQccgDy0wshTqL3ziJ0wK7LwdopjWksjzmJmov+WMI2XToEHgsHByGNmFSEhfUM2hW7RcmPc2dH1PbunGRqZB9UCFdKGd9qzYVoNhmpKSwSya4YLZmd9tw8BXCbd/5MNMIs1DRZPPCWwVHcstffG1iUKAMm3bZc3lsq9TJZ+jq68DVQsyPrUIzkvAfLzv/0UUsmpU4p1ONmHJCB9BPgFFK7tq8rClcB4pFHkI/TDb4s5KC9N57xEJ5oXxsJzxH5PIW4th6kIGEKi1GeW6TTFiF/LYHma+91jz6e+MZKXE18NFlLnZJt8lhCHvoXfoVNmr4eud9ljiwGwpWsI26UZdAoOBNmytAdc6PUYNeuI1H+2RjE8eZuc5rCbROvjX6QigcJsHE7UZCLwYisxdsiH4g01KTuaGR7MkMcguOMfoFOPfSOpqOD49WNPqscnOAK9sUFQJa5WqoTrP0qjUDrcfLZAH+di4VsBXseY9PA4lBUyRdpqvlo9Ul4FvPB4epC9Zp6WeZOImElipL6mMqqVM0TOmjfv2sRpgqRzV/K5D178s1aoVDNbSyFu2yXM1lsrjynu6mSVcf0YOXQa0YUg0sSaMks84WDr1iUpKH5Q7vXgzoeVbcWIc/n9xsk/EN18k9wMTxsT3T4Hgww2etcZr5+bKIL7+dCSsoirSVYvdQ1uqkCvmOs/QKsMzIfv4CNaxzWiMpIaXCo90s9DSvLZi0gXjLN5f4KXHuGmec1MvcIWDBIwjFokZDKG4nneKk9Sv8OflKTDoF2BB6q8YTi+0asFAJZHs+uqqTMRJUOhJFO7TDerSmF5ULHXLtidorS8T6mTsjDRMo3yrGhRqQ1SakXRTr2Bg6x4g1SUynB2vI9gS+NGGhqstNp8tkS6lzWz+HVnZF9K4ctrXnGwCRTXdbutcfMaefXa01/QybFtevNQZUq9wdSTAnS9Wh9/X7PL+dxaqRURdEhSS3PZa7aAItmrllSvurcJ8UQ7YdyU/BNWINsTvGgzqon1PE66wRRWyPZHVhytHqqv+7IcpS0ujabn/G6jj/sj4vW6y5ZK+cWs9409O52m30sho0y4SlAdEodyfapYxOhtapFJiwudfDhqE/HmuSWizzMvBrAydl8iwfytFkL8o4mX62qWq7RikbAzcr3xo/NQmQESlHutqdFk/yb6KEkavl49DHU0pacoPUbarJYIS8hmE0M1wwfjpQpso7T/Rgi4ntqIou+mYyZqQ4PKXxcYpVYaBONG/TNQZ6F9HtuYf+wLlIqcFQDYMQhIgp4/MtvZFIRlNi+5xu8DxnPUKqv2KAF+CByQWW7jXqVnlJ3cBngxVerRU1QpZog+lXCzVZ4++h5s6RLr64zBUtNmpjFQMSsIrMTgR3DWlBTkJgKu86/rupEVDBepd1Kiq5jdmGfGeLU9C5lxeu2buJ5sekJyiRwDIbBpUjd7U0XBjgwb9hitjRI17MKSqtLSCcsSRzgVLqhEiaajHc8pMkVfHha34yh5yz3y7vM19y9u9LBcGT98PHPTp01v499/4nKkDXdPXNjC/vxdAqmzu09OSzu9aC+oC7OtN3fGVUK3pufR/m6+ZPMck1NYC09oVgkq/rG5gT6ouU8QgBzbFkK3rw7eq4EKuV+uE7RP4bTaQ9MnNnZ0i39hhcwxc6ceMk6/r2J+jwOGXUjsbxhg+2NabX3YPUhU6ITm1e0XEYjnUaCLZlbu6iFJU9en1GZM1iZH0+npJkPcRAsxJW5we/irMNBKCFJAdv9DECqNpU2xUQoLw5IUJ8zVNlF/34pw1mGcTwOvKcbryhopj4NQ3FNkYofv8NqbmiUaeKR30MP2EY4qHArfxyq4KqO1Dtm6fMNXFbEa564MqyPf2AYWtnQfuMInKzujid3Q1BfExe5d6HDb6ZCF3C5AH7MyrQK74OR4K1KZx6Xm1kXev977gqIg9joDe2zQ2yLsetnz1nnewwLp9qFKrM4CGyeQhMwvyO0TcSMo6boLkr6YHNh32rJxMXi1+WWPrpyR1JNF3ZZY+1sNbO2wmdShdKZnrluXp+5Zsjoqy4qGF+gMWgsQmL2RxR5V7GOgGl6gb7HMvenCTQc71EbTBIQ8WtHi2H6dyq9/mby7DsGwl0Kzl8CvSFbHLGsRGPVZPZ2MBObQnpxAI7PjiE/21AI+7cWi3IbJHlkbYte+rS4ulJRnW/R3Q1IZChZy3qvvS5f5VRfIzVRsWx2DPhQQlE/OFb6wKgCU6SzD5W803UjFltcVIwTBZaQ6e2qpaztJn2z+P3eJjiWwZhn951fX2vmZ2V6aWJGDm8M9JIsnUOfC25Fp2cybxhSIulwtoFmZkW/V1ubStNSl0PXJuUpMIuI4gRHrmyXUBfWT5XgzTAywDEiGxm/fTrNK1cimof/vbsNjimhq1ZiWUiHMy2wY5UQKCYAz9yPokk54NX92S9uS7yn1ZU96gbNWjxqZbNNJ8qU0RbBKksn2oxwA8sRiUJ4IcbOiaVF4NpKrjwR3puEnoFYVMe4HHu8lJf1ibpKNHcWFyhbZ8TbJKdchs6ZNcj3a0YRTk0i2XbYqXMErkMu5Bwu29sS+2ZXWbzitiJP05LIeOq17R3NyjMaoQUR+9d51tA29xsD3G6qE4ItgTf+xTov31ieg2ZwxJEWabvjWTovCvQyfc9Y0FxT6kmUycdn4bw2xbjDUhulRYBNH97zFrfwfO8egvfsYQtqG8EquiD/Txv/rI032qNKxElyGTONP+kDJCVZLsrOjVQUxU8CwX8ghwD6J+e2/6Ecgj89e/0v+4Y98ic5BNhvH/Q3Cvj5ZRHmN5J9kwko8s0q+N83meDfL7o/kgk+/yC6P/t5kf+yVII/Edz/6lSCf0H/HakE4J+qM/pfpM7w/49TCSz6b34wIkeOr2cFwo32a1JV3RcgXTc4CmkSBx/G4bv4pPyHFV3Hmr4ycz3OBV3thRhTtjZUVFysAu0VQGjZs09dpFWpAjwAwUNJiJu4FtZrjJkEAMDoNNLGtfYx2/BjQyEoh/M8O1HYeAlZs0Mzip74vX9TB/p2GYzcB2IanEjS9vU0QIayKfItZ5IFRIEmQpIySVELcxWkqZDCwL5ZrFRAslecJjszVc+8R1vWrKhGOJJ9f4gAzhmPNV3SZtO4dpRbNimS2Bp+RpCBZEkM6Cq3cwmKlCRDg0vwTaIEZop/Q+b7Z0DqYdL6CPLTk/hw7Ic5Xg+6WizY/bAbWr6/IkbVA/Z+YaIbpzCPvXoKppAxqdkEN914TyDRqL5xDNN79csM1p6S1ei86xS3oBw2dhBFkKo24yGSkpwdUVKD+Qw5RUUidVio7xfPOJH9aqW4Di6l8t3h04f4fr+RC6TIIkXGXdiAVrmrXhPMrFhkjeG268cr6yMgZYbUaEvXScOCtEUfN9kZTUiVV9/TAAFIHo/8IW4v88ez5mM4wK3r4Fa6PknZZrK1LZn3oVTV56hOPiOeA2tZq9LRa3Lm5EAiyUSYYQnc/M3wP0FJ0DfqpLjoUCAP3sDaMnlLfYqmdaiqWJ12OeT09XYp7M8zI87QPNVBIo4kCz61LzWHwXzaGJGhhFpxoU8ZxN27voS0fPmzivtxeg9g/JzHZg+RC8lx9104iVTjLeB50aM9ctsyCC30WVL7ZdEsqAwKzpU62WqUJece7t6MyimHJ2Aw6PVqKRDfc45BcXskQroFhaTqYTB+FmHHyMqR7z3P1XksNpUjBYnbASvDkW6ln3MRfnRPHEAzYKghaE+djLSyQ4ectav2rn1On4KbCDUaGeSFPHk5uc8dCFyKLcEOWTWAfUgfUBxU08VgSmD0nqwkZkAFK75BxPCNpVPbwI+J/ibTXqG+gLlGBdplZwJj0o3gJKtfm979YLY1AGRJVvGmFzOEyp3QzW431k1lw6AEKdfPYQ4TFkZxY0FHqJ1WG99Jcq5sZULbpQjBcKKEjwNtRnS+XjibTPmvjUSL2K9wTJ8sQqkOey291EXdd2sT67nvxAkU+5qGaDx+cBIFgx054zEaoiTOul78TAbwVlLVy5lT5FVwLIw6Cv4bAnQII+9x6hFr4qXWPJ7t7/kUZpxdMmII4al5OZ9o4vjbR00+NrYVQJTDLHvE9M546/sF3/N6A1YhCnxXZTB9fX6GXMwwWCjqhWChwXuFTJtv0Bk/vIJt2feXH/TZ8wqeMdGTCOlrnGCZPrmQKgA9/fDkoiTqVTzqRtK04I8NMZwyvafoaeJPe2chVVQPUix3FauDtS8mLzRnf8xBiai3dZU8YtJI6as0aYg5l5AE3q8KwD2GufpMcK/ngrPMhAZFBI8DqM684/jMUJjheEX3xVfLgzyNMIHnm6GwuhvdefHq90nbXmgkBHmUyhdV8hLWrl9EZR04iiJexGOAZo6IIuSEChnq8HxuLciiVLqgs8HDK+c6c11q/nqYLXGfyw3Y3+8Lz33ALaU680Q6Cs6MA3yw9UACFVlZVNEexSA3KPrSLMQq59PvKRCjO7QSKVVhx4xQ1CUdU0noNyp5kTJ9ldziTAI6e1csVbMHznpwR7RlbFgOmiUXWeGoIjxvAd0bZgyuiepMAS+AffQJMS1IbtXi3ZGUhoJ80aOawhwKuPv8ynNpURYIG5qKLBuRQ7xeUbt0O5+030wAzgSeTi9tPB87whUToYt4rV/wwnSlTdvM5/s6pnurjbnG9Yh5cAn1KBh4eVLYY6Wblw5tU48BSi3AS5XIHHtZojTSASBtT9jhTVFm52Myr0dG4aefitt1ZTkmwX6qMG3Fp0NpOsAC8pm7EBPg1Go7tAGvsVvD70AfKIosTyHq8DKTOAU1RXmhb+FEOdb93vkAwzhim7Ltok2LlWf06xkxpTUie8FMDtPvm1aAeqQvKqPYfGWOdIo3nCQs3/OCFQzvVUZkA7d4CZPz2k8nJ0xiWj3SpOzp3TThrjcyKdFddtQo5+lk52ScG9h6yyltRVpkOhR8C4dDKn3fw+/teCwV2s6jS9nMFpfVnf18J90E+zF7ULE7MfAWDqYK+nwBBJPrjL6SxdlXULEn+RYjUPrrHm9TaUZRFPoOLckW6D1kcNjTQchT7glaQ90HoVtQ6xnkS+eRJT44CK+iIV3DQuZRiwRWxmrtylKV7Jkq/24scvxyaXSDRciSowF+rCNQZINax8zm3jNf4XDuziUrErVETdFPG1GOiiaOmDlsQhnJlaSHQgChcBo0Za7fMJ7XUAgpuxxb8tVjNvLFn4OJBTco0VrHbQZypM2SjaOcSm9muIn0FQ2/2wDCFJK5yKrkTQTJ+NuiXP0UI7Y8kij1fm0B6T27dd6vBjCVvoNltaseTVqMQFbae1xvjukU2VhYF6+Jn2AC+An4PZtmYqlWaWWaBPcZf/GyxUsCt1p9cceBYyV3Xpi9yqtKF9/flAm+vby9Ya+GWrpzVFza3zblkVVkshaKb9MdbClZ1jUnNxp30mVWxI/d1YqDJ1/c8eG5SUj2kXf8CXXQJv3X7k6eMhGVJX236OrN63ysJb/4zOQML1FRv4YwVBV2r4C92SLTcNd1xK1KOQiq3yuOhkj2nn+iXrTSdljwZjNYbCceciwDcI1casA0IaPeuIjuGGlTGh7eQv59+K6Mqe/PTj0WdTVFk5vNB8He7yYou5/3kC1J6io/pGmVyyhxUfA9I5pA3PokXmGSsdcz0JhsiTfPjNvZnaY/xA55OthwcJBTHBK6hym6iY9Sc5HJbEgDu8hpbwdEKe7DwvqQiMAlDKCK0pgEedlsHDwIdCjHF5ZOnQm/TBwS7KNluZbom9tjft+gnxlDWEFGFJO6ZAzeh8B9YMW6BQ9eU5lkzk1pdfsFu/fUVBRWK4bB3goCUMdmUqUbcilDKZoaMj1RnygUtywK3Sxru9L8hmTl1Ucsb/FqCY2fXTtLg2zKZ0OspFhwBfjYtPDK7ZI16TOuBnKJFMm8VDJcPZfkxbZBMp5U7WkymYevhEZt0qLnqVQleapQDhQrb93DKObOOQCyonzHdIv/09c/6SsGKFTI2Ey2PNuhL3eilIItxh4S8tIX2/t/tHdlTW4iSfjXzOsGiPuR+xIgQJxv3Ie4BRLw65dSt8dju2fXEePdCe86ol9oJQJlVX2ZWV9W5gUTffTxSseFjhhXYLB9zMz08E7VE9r1ruPY5VuRPYbtTIVnJX48LO8CdwjN6bnE+yBtagRrEwDFaaIXc7cuNiP3HTsTy7v9sx27CymIO2yKKPB+vi2Dz2zcQ1GVqapMFTmh7O2R90F6tb0beeC64t9i+LpZ4g152yjPJ+WKJ6HAo+msv2zRPHG+rIMc2XEN7tn5ubxJvv0BHy6UsuSwSarsOa/0VEersq61QkMi8qdLPp7xQPn91bSYuzyqNcB9O219MrJSScn853QhnY1FwzJTJm+ZOSzQhSrPz4gQ0tdrXZeR/0CIDhBXGraAFzUAHmkXA3Msi1L8jIbP4iajZXh9VmsdNrnLWSCXiblgrFyY6E1p85q0LjFc1Ah1+CW5mMQbETDbKDD0gMUNTxleZSeX/AyxPC9S8uEzXcERVwaGl+VwR1q0FiqXHuTM8rAWqzPv5m8+wJryyRjdm/oEJDy5zW50blTFyBFqPDMrFagwse+SwgKHydV2bcdKBs2Ym5By7hHU8Rg1lzW33lIph5/ZbAWOF1zavNtUGZh7rwE+Kb9WeYo/LOPA6TJySyGtdd0zNfkJuFfBOzUbDYrAeEVM6pLUdbfV6AYcZAr5Qnz3TH7fnNuwa3FUTryKC2M6g0pbYId+bBquTbO+rf359GikaU+4KjnXIACJA66wBfVeexCj0DsnbFVzbs/tHR3cnOcesTMOKWbqR0yzHqZTo8fZn3asWoPehU+i3IoIMdOiqdG7H+GI3iYKc4qmcyghOjLBxAWpH48cED0KZviDL82FtjdiEJfugdjshuzEtIa3J6+A0kMsKch7t4ijc3gfO0/bcb+VYA6WRrsWTFUeb0jqpnNrwETkkNzt2JiPbblw7uPr+XhqKVNtVVi5uM6gCzlq9e0rmKeV5uzdJsyv5M1aNR9BrkE06/2yBYw8uiRbGzGEN/B0s2qsnm1NxNY5CavEuisV30C5tJN3XbIc0wAn+t05HOxy9tT7APScHZ6QMfnqzUOJyiu2ejEmKQEkeqDXIl2rfgoyyXxvPeLCQLjFFsTqvq8vBW+Z49pgBWlDV9HQpSkoOH7TJkATvQo2g1gIYaF1UkoRKEn2aZetBCM4BdxWtd6EH56nH9Cy7Jnmq1CP7b04EccIp0/xOrXPyXMboOjJhgw6YR250Pf5gFFACOtjEd9a0TBEd8GSxfEro565yqMupl8rT8LfGBtPAzbA53OekHDarZs3esqlVu+8Rdcr7wWnfTXRVRFI9qpfrEaETq5EIqIQs0mZzDn89mOO2dXQkpAbD3d0SBfEKP79onWIhc4XfKe9yzGdTleIulw1CL4H6p1pLQ3iNA3G8/0Gs5FKsHLXoHSSUutqobhWS1tWCcQsd8kVOpxNY78ThvU0yH1/bI0b1ehjOlyd3TQ6rdd5Vxb5IL8JE1hVmG8Q3PiKIS1jOlTD49q5eEbbMwCI6Hdy6FxvmDIu043PaaFh6ZSUas9h3uI+H38dDhg2jMalPmwmzT8tFIStBnz1exUerw2UmYdEdEaNtriz9yrSvdkj0nbHkP7AUcS6xjZwsAiMQag6OBlXB9YBdSxFSHlRd6TQngN+zJO7WRyzfLjwx/KXMnxZj1C/muNAdLi2iFWjtSngEutuA4UYCFazhFEuJ5jigyobJ1eeW12s836DCbDLWuIpTdrOGXfIVi40RYxEdLGrWSzr5nG50H3lkFPDh8rrBKp2btAlJikyAKW6urNHYmWsPMVwJAj9CN1jYEvgFZRcdZCtBIkwNci7hIToRByus1aluWhm+gbs5m5Jm9pkiBunDUSndFX1z52g9HQ3FyY48Lz1tZjHu6SGrPxQ/2mPew/HMyxHUwtjBEGcuF7iS/kMZwQEdt+g/YGo2LDkWHqKs3G4Ri1rKYOfQ1jSwleGpO+9HV0tEtqLlGcvwhAeq2aXofVMBRxuwVTnPxm+YMKwSeA0ZXqaEdiH4oW7bVytEqHRxCsmvFhozbKfZmCIC7Ua2mMNZ6Y7pWizm4xsFZ7Ai7EZGUGHrk16OnELErGP0ShoRc7YQ/aIFikFLFF1ljhzUY/AE8w+xqAWoqNvtKqyVZNLAf6WFiAFSMaBswCHeJarT3oYF3DdFXW41Pdo2c+9Sg0ZLSjO0wd7r7FVQNEIP2RW3vftlQ3yoO3Qm6HDJ616DtYlzhqnOGv1jUjxkbnFkHaYxGyOU7a4pwb3GM8zYx9a9valZ0TuUSqgOobK6/yxFD3OOuZdrAxVYOr0mTdHiLyuL7lajcuIwmw4vmrzRpqZQVRGIdtE0uxHHF5stHwBWMZbSOJNEbzk68pEy0ofy/fh1wPIY+wJ45YM+uH7zEd0v+6uaZDemtBypds9NkN9uopQbdi8gKHlYbWL+UFCaihtbROXhQHMXSCBKiEF6tIsbTAmAnyJGjrFdcuENVFXk/bg78N81ZVbA2MBKT86sEOrUAtpjDJdsDcZhcU2vzk0y2GprPvWatIyAw+6NmnDk6Z/8K70IIg9uZJswZr5eWLGTQMBOJMWTyvZLFAFJY+ff5WkRP+EEfpTkhL59tDsx6wO/J8iKYkPSMo3ShJ99UFAQUOE/11u8vtH7BM3CX9w0Bkn/ovsJPHNcGRpkX364f00l33Rd1HDf/7vV4r7LHPuAZv2GsE6m+ftXZ3RMvdfju/bM8GDviA6P+gVcO+XKcn+PY84R1ORzf9C7k/GYcqaaK4eX77HD1fyt3P+51Iy/J1KPv2dSqb+DiUfqpw2H9x/LOT3y+CPn3Hr+5e/XW3vV3/DCvirg/N+66WvuvkPVQq+SCwgvsapt7d6v+fzANPTFG1/EBuAwP17n4J/3bLqa+mvW8x8KQ82qV/P/zzXftfHX+gL8lFxhF8tsX61xPrpW2Kd/vHbpwZYX7S8+rDTFf0biYK2R7TwG8X93jDry55aP3Pvqw/ys74/Dwv/jjQs/AOH/Ue0vvoYtD5Kw/oFWr9A66cHLeQfL7A6MOeVG/sN7Byf/j8hD/I19HzUMuwHQQ/YBfu9Pembe/W5ySvC/xM= \ No newline at end of file diff --git a/docs/database/Redis/images/缓存读写策略/write-through.png b/docs/database/Redis/images/缓存读写策略/write-through.png new file mode 100644 index 0000000000000000000000000000000000000000..d240e5da454a8ae44a743f8b0c4ab41a3dec057e GIT binary patch literal 63069 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 z%0D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 JN6~c({~wh|H;4cL literal 0 HcmV?d00001 diff --git a/docs/database/Redis/some-concepts-of-caching.md b/docs/database/Redis/some-concepts-of-caching.md index fd4f960b..048afb3d 100644 --- a/docs/database/Redis/some-concepts-of-caching.md +++ b/docs/database/Redis/some-concepts-of-caching.md @@ -1,5 +1,3 @@ - - @@ -121,39 +119,56 @@ Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 D 你仅仅了解了上面这些内容的话是远远不够的,我们还要搞懂其中的原理。 -比如说面试官很可能会追问:“**在写数据的过程中,可以先删除缓存,后更新数据库么?**” +比如说面试官很可能会追问:“**在写数据的过程中,可以先删除 cache ,后更新 DB 么?**” -**答案:** 那肯定是不行的!因为这样可能会造成**数据库和缓存数据不一致**的问题。为什么呢?比如说请求1 先写数据A,请求2随后读数据A的话就很有可能产生数据不一致性的问题。这个过程可以简单描述为: +**答案:** 那肯定是不行的!因为这样可能会造成**数据库(DB)和缓存(Cache)数据不一致**的问题。为什么呢?比如说请求1 先写数据A,请求2随后读数据A的话就很有可能产生数据不一致性的问题。这个过程可以简单描述为: -> 请求1先把缓存中的A数据删除 -> 请求2从数据库中读取数据->请求1再把数据库中的A数据更新。 +> 请求1先把cache中的A数据删除 -> 请求2从DB中读取数据->请求1再把DB中的A数据更新。 -当你这样回答之后,面试官可能会紧接着就追问:“**在写数据的过程中,先更新数据库,后删除缓存就没有问题了么?**” +当你这样回答之后,面试官可能会紧接着就追问:“**在写数据的过程中,先更新DB,后删除cache就没有问题了么?**” **答案:** 理论上来说还是可能会出现数据不一致性的问题,不过概率非常小,因为缓存的写入速度是比数据库的写入速度快很多! -比如请求1先读数据 A,请求2随后写数据A,并且数据库A不在缓存中的话也有可能产生数据不一致性的问题。这个过程可以简单描述为: +比如请求1先读数据 A,请求2随后写数据A,并且数据A不在缓存中的话也有可能产生数据不一致性的问题。这个过程可以简单描述为: -> 请求1从DB读数据A->请求2写更新数据 A 到数据库并把删除缓存中的A数据->请求1将数据库A写入缓存。 +> 请求1从DB读数据A->请求2写更新数据 A 到数据库并把删除cache中的A数据->请求1将数据A写入cache。 现在我们再来分析一下 **Cache Aside Pattern 的缺陷**。 **缺陷1:首次请求数据一定不在 cache 的问题** -解决办法:可以将热点数据可以提前放入缓存中。 +解决办法:可以将热点数据可以提前放入cache 中。 -**缺陷2:写操作比较频繁的话导致缓存中的数据会被频繁被删除,这样会影响缓存命中率 。** +**缺陷2:写操作比较频繁的话导致cache中的数据会被频繁被删除,这样会影响缓存命中率 。** 解决办法: -- 数据库和缓存数据强一致场景 :更新数据的时候同样更新缓存,不过我们需要加一个锁/分布式锁来保证更新缓存的时候不存在线程安全问题。 -- 可以短暂地允许数据库和缓存数据不一致的场景 :更新数据的时候同样更新缓存,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。 +- 数据库和缓存数据强一致场景 :更新DB的时候同样更新cache,不过我们需要加一个锁/分布式锁来保证更新cache的时候不存在线程安全问题。 +- 可以短暂地允许数据库和缓存数据不一致的场景 :更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。 #### 5.2. Read/Write Through Pattern(读写穿透) -Read/Write Through 套路是:服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。 +Read/Write Through Pattern 中服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。 -1. 写(Write Through):先查 cache,cache 中不存在,直接更新 DB。 cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(**同步更新 cache 和 DB**)。 -2. 读(Read Through): 从 cache 中读取数据,读取到就直接返回 。读取不到的话,先从 DB 加载,写入到 cache 后返回响应。 +这种缓存读写策略小伙伴们应该也发现了在平时在开发过程中非常少见。抛去性能方面的影响,大概率是因为我们经常使用的分布式缓存 Redis 并没有提供 cache 将数据写入DB的功能。 + +**写(Write Through):** + +- 先查 cache,cache 中不存在,直接更新 DB。 +- cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(**同步更新 cache 和 DB**)。 + +简单画了一张图帮助大家理解写的步骤。 + +![write-through](images/缓存读写策略/write-through.png) + +**读(Read Through):** + +- 从 cache 中读取数据,读取到就直接返回 。 +- 读取不到的话,先从 DB 加载,写入到 cache 后返回响应。 + +简单画了一张图帮助大家理解读的步骤。 + +![read-through](images/缓存读写策略/read-through.png) Read-Through Pattern 实际只是在 Cache-Aside Pattern 之上进行了封装。在 Cache-Aside Pattern 下,发生读请求的时候,如果 cache 中不存在对应的数据,是由客户端自己负责把数据写入 cache,而 Read Through Pattern 则是 cache 服务自己来写入缓存的,这对客户端是透明的。 @@ -165,6 +180,13 @@ Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由 但是,两个又有很大的不同:**Read/Write Through 是同步更新 cache 和 DB,而 Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB。** -**Write Behind Pattern 下 DB 的写性能非常高,尤其适合一些数据经常变化的业务场景比如说一篇文章的点赞数量、阅读数量。** 往常一篇文章被点赞 500 次的话,需要重复修改 500 次 DB,但是在 Write Behind Pattern 下可能只需要修改一次 DB 就可以了。 +很明显,这种方式对数据一致性带来了更大的挑战,比如cache数据可能还没异步更新DB的话,cache服务可能就就挂掉了。 + +这种策略在我们平时开发过程中也非常非常少见,但是不代表它的应用场景少,比如消息队列中消息的异步写入磁盘、MySQL 的 InnoDB Buffer Pool 机制都用到了这种策略。 + +Write Behind Pattern 下 DB 的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。 + + + + -但是,这种模式同样也给 DB 和 Cache 一致性带来了新的考验,很多时候如果数据还没异步更新到 DB 的话,Cache 服务宕机就 gg 了。 \ No newline at end of file From ae6a6327765fd30817d335e95c970925cb61feb8 Mon Sep 17 00:00:00 2001 From: nightsswatch Date: Mon, 23 Nov 2020 10:41:55 +0800 Subject: [PATCH 04/22] fix typo --- docs/system-design/framework/spring/Spring事务总结.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/system-design/framework/spring/Spring事务总结.md b/docs/system-design/framework/spring/Spring事务总结.md index 1e82a2aa..0bc45c8d 100644 --- a/docs/system-design/framework/spring/Spring事务总结.md +++ b/docs/system-design/framework/spring/Spring事务总结.md @@ -51,7 +51,7 @@ public class OrdersService { 另外,数据库事务的 ACID 四大特性是事务的基础,下面简单来了解一下。 -## 2. 事物的特性(ACID)了解么? +## 2. 事务的特性(ACID)了解么? ![](images/spring-transaction/bda7231b-ab05-4e23-95ee-89ac90ac7fcf.png) @@ -143,7 +143,7 @@ Spring 框架中,事务管理相关最重要的 3 个接口如下: - **`TransactionDefinition`**: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)。 - **`TransactionStatus`**: 事务运行状态。 -我们可以把 **`PlatformTransactionManager`** 接口可以被看作是事务上层的管理者,而 **`TransactionDefinition`** 和 **`TransactionStatus`** 这两个接口可以看作是事物的描述。 +我们可以把 **`PlatformTransactionManager`** 接口可以被看作是事务上层的管理者,而 **`TransactionDefinition`** 和 **`TransactionStatus`** 这两个接口可以看作是事务的描述。 **`PlatformTransactionManager`** 会根据 **`TransactionDefinition`** 的定义比如事务超时时间、隔离级别、传播行为等来进行事务管理 ,而 **`TransactionStatus`** 接口则提供了一些方法来获取事务相应的状态比如是否新事务、是否可以回滚等等。 @@ -238,7 +238,7 @@ public interface TransactionDefinition { ```java public interface TransactionStatus{ - boolean isNewTransaction(); // 是否是新的事物 + boolean isNewTransaction(); // 是否是新的事务 boolean hasSavepoint(); // 是否有恢复点 void setRollbackOnly(); // 设置为只回滚 boolean isRollbackOnly(); // 是否为只回滚 From 29201e640d1ab490afa26e73f33585ba307fd806 Mon Sep 17 00:00:00 2001 From: nightsswatch Date: Mon, 23 Nov 2020 12:07:54 +0800 Subject: [PATCH 05/22] typo fix --- .../PreparingForInterview/美团面试常见问题总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/essential-content-for-interview/PreparingForInterview/美团面试常见问题总结.md b/docs/essential-content-for-interview/PreparingForInterview/美团面试常见问题总结.md index 869416ce..634cdc46 100644 --- a/docs/essential-content-for-interview/PreparingForInterview/美团面试常见问题总结.md +++ b/docs/essential-content-for-interview/PreparingForInterview/美团面试常见问题总结.md @@ -106,7 +106,7 @@ request.getRequestDispatcher("login_success.jsp").forward(request, response); ``` -**重定向(Redirect)** 是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过 HttpServletRequestResponse 的 setStatus(int status)方法设置状态码。如果服务器返回 301 或者 302,则浏览器会到新的网址重新请求该资源。 +**重定向(Redirect)** 是利用服务器返回的状态码来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过 HttpServletResponse 的 setStatus(int status)方法设置状态码。如果服务器返回 301 或者 302,则浏览器会到新的网址重新请求该资源。 1. **从地址栏显示来说**:forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。redirect 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的 URL。 2. **从数据共享来说**:forward:转发页面和转发到的页面可以共享 request 里面的数据。redirect:不能共享数据。 From 3d7ae0e8ed8fd8f35539460c7d8820cd5d902474 Mon Sep 17 00:00:00 2001 From: guide Date: Mon, 23 Nov 2020 21:53:44 +0800 Subject: [PATCH 06/22] [fix]error link --- .../Java集合框架常见面试题.md | 2 +- .../images/cap-base/partition-tolerance.drawio | 1 + .../images/cap-base/partition-tolerance.png | Bin 0 -> 35670 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 docs/system-design/high-availability/images/cap-base/partition-tolerance.drawio create mode 100644 docs/system-design/high-availability/images/cap-base/partition-tolerance.png diff --git a/docs/java/collection/Java集合框架常见面试题.md b/docs/java/collection/Java集合框架常见面试题.md index 71e89ac8..fe58927f 100644 --- a/docs/java/collection/Java集合框架常见面试题.md +++ b/docs/java/collection/Java集合框架常见面试题.md @@ -217,7 +217,7 @@ public interface RandomAccess { ### 1.2.3. 说一说 ArrayList 的扩容机制吧 -详见笔主的这篇文章:[通过源码一步一步分析 ArrayList 扩容机制](https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/ArrayList-Grow.md) +详见笔主的这篇文章:[通过源码一步一步分析 ArrayList 扩容机制](https://snailclimb.gitee.io/javaguide/#/docs/java/collection/ArrayList%E6%BA%90%E7%A0%81+%E6%89%A9%E5%AE%B9%E6%9C%BA%E5%88%B6%E5%88%86%E6%9E%90) ## 1.3. Collection 子接口之 Set diff --git a/docs/system-design/high-availability/images/cap-base/partition-tolerance.drawio b/docs/system-design/high-availability/images/cap-base/partition-tolerance.drawio new file mode 100644 index 00000000..34112251 --- /dev/null +++ b/docs/system-design/high-availability/images/cap-base/partition-tolerance.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/system-design/high-availability/images/cap-base/partition-tolerance.png b/docs/system-design/high-availability/images/cap-base/partition-tolerance.png new file mode 100644 index 0000000000000000000000000000000000000000..d523025fdc699e292df81002eda20eda1bcd933a GIT binary patch literal 35670 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 z +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 Ykag33eTT&bu*4HZc~!Xz8MEO31F#ISD*ylh literal 0 HcmV?d00001 From c422061b56770be8b36c8dab0a645b6f8838f28d Mon Sep 17 00:00:00 2001 From: LIU Date: Mon, 23 Nov 2020 22:51:36 +0800 Subject: [PATCH 07/22] fix markdown error --- docs/java/basis/BIO,NIO,AIO总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/basis/BIO,NIO,AIO总结.md b/docs/java/basis/BIO,NIO,AIO总结.md index d56074cd..29d2ca86 100644 --- a/docs/java/basis/BIO,NIO,AIO总结.md +++ b/docs/java/basis/BIO,NIO,AIO总结.md @@ -15,7 +15,7 @@ - [2)Buffer\(缓冲区\)](#2buffer缓冲区) - [3)Channel \(通道\)](#3channel-通道) - [4)Selectors\(选择器\)](#4selectors选择器) - - [2.3 NIO 读数据和写数据方式](#23-nio-读数据和写数据方式) + - [2.3 NIO 读数据和写数据方式](#23--nio-读数据和写数据方式) - [2.4 NIO核心组件简单介绍](#24-nio核心组件简单介绍) - [2.5 代码示例](#25-代码示例) - [3. AIO \(Asynchronous I/O\)](#3-aio-asynchronous-io) From 09294279b428827d1b26ecf281df41b49b250c05 Mon Sep 17 00:00:00 2001 From: LIU Date: Mon, 23 Nov 2020 22:55:05 +0800 Subject: [PATCH 08/22] fix markdown error --- docs/java/basis/BIO,NIO,AIO总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/basis/BIO,NIO,AIO总结.md b/docs/java/basis/BIO,NIO,AIO总结.md index d56074cd..835916e3 100644 --- a/docs/java/basis/BIO,NIO,AIO总结.md +++ b/docs/java/basis/BIO,NIO,AIO总结.md @@ -11,7 +11,7 @@ - [2. NIO \(New I/O\)](#2-nio-new-io) - [2.1 NIO 简介](#21-nio-简介) - [2.2 NIO的特性/NIO与IO区别](#22-nio的特性nio与io区别) - - [1)Non-blocking IO(非阻塞IO)](#1non-blocking-io(非阻塞io)) + - [1)Non-blocking IO(非阻塞IO)](#1non-blocking-io非阻塞io) - [2)Buffer\(缓冲区\)](#2buffer缓冲区) - [3)Channel \(通道\)](#3channel-通道) - [4)Selectors\(选择器\)](#4selectors选择器) From 89409b0720047862649e9e400ec4f20703242e22 Mon Sep 17 00:00:00 2001 From: LIU Date: Mon, 23 Nov 2020 23:54:47 +0800 Subject: [PATCH 09/22] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/basis/BIO,NIO,AIO总结.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/basis/BIO,NIO,AIO总结.md b/docs/java/basis/BIO,NIO,AIO总结.md index d56074cd..b1077076 100644 --- a/docs/java/basis/BIO,NIO,AIO总结.md +++ b/docs/java/basis/BIO,NIO,AIO总结.md @@ -37,7 +37,7 @@ > 当你同步执行某项任务时,你需要等待其完成才能继续执行其他任务。当你异步执行某些操作时,你可以在完成另一个任务之前继续进行。 - **同步** :两个同步任务相互依赖,并且一个任务必须以依赖于另一任务的某种方式执行。 比如在`A->B`事件模型中,你需要先完成 A 才能执行B。 再换句话说,同步调用中被调用者未处理完请求之前,调用不返回,调用者会一直等待结果的返回。 -- **异步**: 两个异步的任务完全独立的,一方的执行不需要等待另外一方的执行。再换句话说,异步调用种一调用就返回结果不需要等待结果返回,当结果返回的时候通过回调函数或者其他方式拿着结果再做相关事情, +- **异步**: 两个异步的任务是完全独立的,一方的执行不需要等待另外一方的执行。再换句话说,异步调用中一调用就返回结果不需要等待结果返回,当结果返回的时候通过回调函数或者其他方式拿着结果再做相关事情, **阻塞和非阻塞** From d14744c08879e78387cab1170cad271e53a0c41c Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 24 Nov 2020 22:14:57 +0800 Subject: [PATCH 10/22] =?UTF-8?q?CAP=20=E5=92=8C=20BASE=20=E7=90=86?= =?UTF-8?q?=E8=AE=BA=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../high-availability/BASE理论.md | 26 +++++++---- .../high-availability/CAP理论.md | 46 ++++++++++++++----- 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/docs/system-design/high-availability/BASE理论.md b/docs/system-design/high-availability/BASE理论.md index 770ffd62..61bc81c7 100644 --- a/docs/system-design/high-availability/BASE理论.md +++ b/docs/system-design/high-availability/BASE理论.md @@ -1,10 +1,16 @@ -## 简介 +## BASE 理论 + +[BASE 理论](https://dl.acm.org/doi/10.1145/1394127.1394128)起源于 2008 年, 由eBay的架构师Dan Pritchett在ACM上发表。 + +### 简介 **BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。 -## BASE 理论的核心思想 +### BASE 理论的核心思想 -即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍需要保持系统整体“主要可用”。 +即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。 + +> 也就是牺牲数据的一致性来满足系统的高可用性,系统中一部分数据不可用或者不一致时,仍需要保持系统整体“主要可用”。 **BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。** @@ -16,11 +22,11 @@ CAP 理论这节我们也说过了: 因此,AP 方案只是在系统发生分区的时候放弃一致性,而不是永远放弃一致性。在分区故障恢复后,系统应该达到最终一致性。这一点其实就是 BASE 理论延伸的地方。 -## BASE 理论三要素 +### BASE 理论三要素 ![BASE理论三要素](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91c2VyLWdvbGQtY2RuLnhpdHUuaW8vMjAxOC81LzI0LzE2MzkxNDgwNmQ5ZTE1YzY?x-oss-process=image/format,png) -### 1. 基本可用 +#### 1. 基本可用 基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是,这绝不等价于系统不可用。 @@ -29,22 +35,24 @@ CAP 理论这节我们也说过了: - **响应时间上的损失**: 正常情况下,处理用户请求需要 0.5s 返回结果,但是由于系统出现故障,处理用户请求的时间变为 3 s。 - **系统功能上的损失**:正常情况下,用户可以使用系统的全部功能,但是由于系统访问量突然剧增,系统的部分非核心功能无法使用。 -### 2. 软状态 +#### 2. 软状态 软状态指允许系统中的数据存在中间状态(**CAP 理论中的数据不一致**),并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。 -### 3. 最终一致性 +#### 3. 最终一致性 最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。 > 分布式一致性的 3 种级别: > > 1. **强一致性** :系统写入了什么,读出来的就是什么。 +> > 2. **弱一致性** :不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态。 +> > 3. **最终一致性** :弱一致性的升级版。,系统会保证在一定时间内达到数据一致的状态, > -> 业界比较推崇是最终一致性级别,但是某些对数据一致要求十分严格的场景比如银行转账还是要保证强一致性。 +> **业界比较推崇是最终一致性级别,但是某些对数据一致要求十分严格的场景比如银行转账还是要保证强一致性。** -## 总结 +### 总结 **ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。** \ No newline at end of file diff --git a/docs/system-design/high-availability/CAP理论.md b/docs/system-design/high-availability/CAP理论.md index 0b9df28e..045581b9 100644 --- a/docs/system-design/high-availability/CAP理论.md +++ b/docs/system-design/high-availability/CAP理论.md @@ -1,26 +1,44 @@ -![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-11/cap.png) +经历过技术面试的小伙伴想必对这个两个概念已经再熟悉不过了! -## 简介 +Guide哥当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论。 + +并且,这两个理论也可以说是小伙伴们学习分布式相关内容的基础了! + +因此,小伙伴们非常非常有必要将这理论搞懂,并且能够用自己的理解给别人讲出来。 + +这篇文章我会站在自己的角度对这两个概念进行解读! + +*个人能力有限。如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!——爱你们的Guide哥* + +## CAP理论 + +[CAP 理论/定理](https://zh.wikipedia.org/wiki/CAP%E5%AE%9A%E7%90%86)起源于 2000年,由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出,因此 CAP定理又被称作 **布鲁尔定理(Brewer’s theorem)** + +2年后,麻省理工学院的Seth Gilbert和Nancy Lynch 发表了布鲁尔猜想的证明,CAP理论正式成为分布式领域的定理。 + +### 简介 **CAP** 也就是 **Consistency(一致性)**、**Availability(可用性)**、**Partition Tolerance(分区容错性)** 这三个单词首字母组合。 -CAP 理论的提出者布鲁尔在提出 CAP 猜想的时候,并没有详细定义 Consistency、Availability、Partition Tolerance 三个单词的明确定义。 +![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-11/cap.png) + +CAP 理论的提出者布鲁尔在提出 CAP 猜想的时候,并没有详细定义 **Consistency**、**Availability**、**Partition Tolerance** 三个单词的明确定义。 因此,对于 CAP 的民间解读有很多,一般比较被大家推荐的是下面 👇 这种版本的解。 -在理论计算机科学中,CAP 定理(CAP theorem),又被称作 **布鲁尔定理(Brewer’s theorem)**,它指出对于一个分布式系统来说,当设计读写操作时,只能能同时满足以下三点中的两个: +在理论计算机科学中,CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能能同时满足以下三点中的两个: - **一致性(Consistence)** : 所有节点访问同一份最新的数据副本 -- **可用性(Availability)**: 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。 +- **可用性(Availability)**: 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。 - **分区容错性(Partition tolerance)** : 分布式系统出现网络分区的时候,仍然能够对外提供服务。 -CAP 仅适用于原子读写的 NOSQL 场景中,并不适合数据库系统。现在的分布式系统具有更多特性比如扩展性、可用性等等,在进行系统设计和开发时,我们不应该仅仅局限在 CAP 问题上。 - **什么是网络分区?** > 分布式系统中,多个节点之前的网络本来是连通的,但是因为某些故障(比如部分节点网络出了问题)某些节点之间不连通了,整个网络就分成了几块区域,这就叫网络分区。 -## 不是所谓的“3 选 2” +![partition-tolerance](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/2020-11/partition-tolerance.png) + +### 不是所谓的“3 选 2” 大部分人解释这一定律时,常常简单的表述为:“一致性、可用性、分区容忍性三者你只能同时达到其中两个,不可能同时达到”。实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。 @@ -36,7 +54,7 @@ CAP 仅适用于原子读写的 NOSQL 场景中,并不适合数据库系统。 **选择的关键在于当前的业务场景,没有定论,比如对于需要确保强一致性的场景如银行一般会选择保证 CP 。** -## CAP 实际应用案例 +### CAP 实际应用案例 我这里以注册中心来探讨一下 CAP 的实际应用。考虑到很多小伙伴不知道注册中心是干嘛的,这里简单以 Dubbo 为例说一说。 @@ -52,13 +70,17 @@ CAP 仅适用于原子读写的 NOSQL 场景中,并不适合数据库系统。 2. **Eureka 保证的则是 AP。** Eureka 在设计的时候就是优先保证 A (可用性)。在 Eureka 中不存在什么 Leader 节点,每个节点都是一样的、平等的。因此 Eureka 不会像 ZooKeeper 那样出现选举过程中或者半数以上的机器不可用的时候服务就是不可用的情况。 Eureka 保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点是可用的就行了。只不过这个节点上的数据可能并不是最新的。 3. **Nacos 不仅支持 CP 也支持 AP。** -## 总结 +### 总结 + +在进行分布式系统设计和开发时,我们不应该仅仅局限在 CAP 问题上,还要关注系统的扩展性、可用性等等 在系统发生“分区”的情况下,CAP 理论只能满足 CP 或者 AP。要注意的是,这里的前提是系统发生了“分区” -如果系统没有发生“分区”的话,节点间的网络连接通信正常的话,也就不存在 P 了。这个时候,我们就可以同时保证 C 和 A 了。因此,**如果系统发生“分区”,我们要考虑选择 CP 还是 AP。如果系统没有发生“分区”的话,我们要思考如何保证 CA 。** +如果系统没有发生“分区”的话,节点间的网络连接通信正常的话,也就不存在 P 了。这个时候,我们就可以同时保证 C 和 A 了。 -## 推荐阅读 +总结:**如果系统发生“分区”,我们要考虑选择 CP 还是 AP。如果系统没有发生“分区”的话,我们要思考如何保证 CA 。** + +### 推荐阅读 1. [CAP 定理简化](https://medium.com/@ravindraprasad/cap-theorem-simplified-28499a67eab4) (英文,有趣的案例) 2. [神一样的 CAP 理论被应用在何方](https://juejin.im/post/6844903936718012430) (中文,列举了很多实际的例子) From 847482736db1dca622842f3478096e30d99140ef Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 24 Nov 2020 22:39:09 +0800 Subject: [PATCH 11/22] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=86=85=E5=AE=B9=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +++++++++++------- .../BASE理论.md | 0 .../CAP理论.md | 0 .../distributed-system/分布式.md | 39 ------------------- 4 files changed, 22 insertions(+), 54 deletions(-) rename docs/system-design/{high-availability => distributed-system}/BASE理论.md (100%) rename docs/system-design/{high-availability => distributed-system}/CAP理论.md (100%) delete mode 100644 docs/system-design/distributed-system/分布式.md diff --git a/README.md b/README.md index 21e6fcc1..745bb42c 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ - [JWT](#jwt) - [SSO(单点登录)](#sso单点登录) - [分布式](#分布式) + - [CAP 理论](#cap-理论) + - [BASE 理论](#base-理论) + - [Paxos 算法和 Raft 算法](#paxos-算法和-raft-算法) - [搜索引擎](#搜索引擎) - [RPC](#rpc) - [API 网关](#api-网关) @@ -82,8 +85,6 @@ - [分库分表](#分库分表) - [负载均衡](#负载均衡) - [高可用](#高可用) - - [CAP 理论](#cap-理论) - - [BASE 理论](#base-理论) - [限流](#限流) - [降级](#降级) - [熔断](#熔断) @@ -263,7 +264,21 @@ ### 分布式 -[分布式相关概念入门](docs/system-design/distributed-system/分布式.md) +#### CAP 理论 + +CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。 + +关于 CAP 的详细解读请看:[《CAP理论解读》](docs/system-design/distributed-system/CAP理论.md)。 + +#### BASE 理论 + +**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。 + +关于 CAP 的详细解读请看:[《BASE理论解读》](docs/system-design/distributed-system/BASE理论.md)。 + +#### Paxos 算法和 Raft 算法 + +**Paxos 算法** 诞生于 1900 年,是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**。 #### 搜索引擎 @@ -287,6 +302,10 @@ RPC 让调用远程服务调用像调用本地方法那样简单。 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md) +#### 分布式事务 + +分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 + #### ZooKeeper > 前两篇文章可能有内容重合部分,推荐都看一遍。 @@ -338,18 +357,6 @@ RPC 让调用远程服务调用像调用本地方法那样简单。 相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/high-availability/如何设计一个高可用系统要考虑哪些地方.md)》** 。 -#### CAP 理论 - -CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。 - -关于 CAP 的详细解读请看:[《CAP理论解读》](docs/system-design/high-availability/CAP理论.md)。 - -#### BASE 理论 - -**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。 - -关于 CAP 的详细解读请看:[《BASE理论解读》](docs/system-design/high-availability/BASE理论.md)。 - #### 限流 限流是从用户访问压力的角度来考虑如何应对系统故障。 diff --git a/docs/system-design/high-availability/BASE理论.md b/docs/system-design/distributed-system/BASE理论.md similarity index 100% rename from docs/system-design/high-availability/BASE理论.md rename to docs/system-design/distributed-system/BASE理论.md diff --git a/docs/system-design/high-availability/CAP理论.md b/docs/system-design/distributed-system/CAP理论.md similarity index 100% rename from docs/system-design/high-availability/CAP理论.md rename to docs/system-design/distributed-system/CAP理论.md diff --git a/docs/system-design/distributed-system/分布式.md b/docs/system-design/distributed-system/分布式.md deleted file mode 100644 index 52a9d9f6..00000000 --- a/docs/system-design/distributed-system/分布式.md +++ /dev/null @@ -1,39 +0,0 @@ -### 一 分布式系统的经典基础理论 - -[分布式系统的经典基础理论](https://blog.csdn.net/qq_34337272/article/details/80444032) -本文主要是简单的介绍了三个常见的概念: **分布式系统设计理念** 、 **CAP定理** 、 **BASE理论** ,关于分布式系统的还有很多很多东西。 - -![分布式系统的经典基础理论总结](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-11/1639234237ec9805.png) - -### 二 分布式事务 - -分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 -- [深入理解分布式事务](http://www.codeceo.com/article/distributed-transaction.html) -- [聊聊分布式事务,再说说解决方案](https://www.cnblogs.com/savorboard/p/distributed-system-transaction-consistency.html) - - -### 三 分布式系统一致性 - -[分布式服务化系统一致性的“最佳实干”](https://www.jianshu.com/p/1156151e20c8) - -### 四 一致性协议/算法 - -早在1900年就诞生了著名的 **Paxos经典算法** (**Zookeeper就采用了Paxos算法的近亲兄弟Zab算法**),但由于Paxos算法非常难以理解、实现、排错。所以不断有人尝试简化这一算法,直到2013年才有了重大突破:斯坦福的Diego Ongaro、John Ousterhout以易懂性为目标设计了新的一致性算法—— **Raft算法** ,并发布了对应的论文《In Search of an Understandable Consensus Algorithm》,到现在有十多种语言实现的Raft算法框架,较为出名的有以Go语言实现的Etcd,它的功能类似于Zookeeper,但采用了更为主流的Rest接口。 - -* [图解 Paxos 一致性协议](https://mp.weixin.qq.com/s?__biz=MzI0NDI0MTgyOA==&mid=2652037784&idx=1&sn=d8c4f31a9cfb49ee91d05bb374e5cdd5&chksm=f2868653c5f10f45fc4a64d15a5f4163c3e66c00ed2ad334fa93edb46671f42db6752001f6c0#rd) -* [图解分布式协议-RAFT](http://ifeve.com/raft/) -* [Zookeeper ZAB 协议分析](https://dbaplus.cn/news-141-1875-1.html) - -### 五 分布式存储 - -**分布式存储系统将数据分散存储在多台独立的设备上**。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。 - -* [分布式存储系统概要](http://witchiman.top/2017/05/05/distributed-system/) - -### 六 分布式计算 - -**所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。** -分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。 - -* [关于分布式计算的一些概念](https://blog.csdn.net/qq_34337272/article/details/80549020) - From 1a439ffe65d58982179cc784c46b77f6dd2f58cc Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 24 Nov 2020 22:40:57 +0800 Subject: [PATCH 12/22] =?UTF-8?q?[docs]=E6=89=8B=E5=86=99=20RPC=20?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 745bb42c..f6e97355 100644 --- a/README.md +++ b/README.md @@ -290,6 +290,7 @@ RPC 让调用远程服务调用像调用本地方法那样简单。 1. [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md) 2. [服务之间的调用为啥不直接用 HTTP 而用 RPC?](docs/system-design/distributed-system/rpc/服务之间的调用为啥不直接用HTTP而用RPC.md) +3. [一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架](https://github.com/Snailclimb/guide-rpc-framework) #### API 网关 From 01907b95a9786ffe45c18a3b23640c2fe4d26960 Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 24 Nov 2020 22:49:35 +0800 Subject: [PATCH 13/22] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f6e97355..bc02e68a 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,7 @@ CAP 也就是 Consistency(一致性)、Availability(可用性)、Partiti #### Paxos 算法和 Raft 算法 -**Paxos 算法** 诞生于 1900 年,是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**。 +**Paxos 算法**诞生于 1900 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**。 #### 搜索引擎 @@ -305,7 +305,9 @@ RPC 让调用远程服务调用像调用本地方法那样简单。 #### 分布式事务 -分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 +**分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。** + +简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 #### ZooKeeper From 2bf7bcf940d628bbd47256abecf9cc4145a8bfbe Mon Sep 17 00:00:00 2001 From: guide Date: Tue, 24 Nov 2020 22:54:40 +0800 Subject: [PATCH 14/22] Update README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index bc02e68a..40c4729d 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ - [Spring/SpringBoot](#springspringboot) - [MyBatis](#mybatis) - [Netty (必看 :+1:)](#netty-必看-1) + - [ZooKeeper](#zookeeper) - [认证授权](#认证授权) - [JWT](#jwt) - [SSO(单点登录)](#sso单点登录) @@ -77,7 +78,6 @@ - [RPC](#rpc) - [API 网关](#api-网关) - [分布式 id](#分布式-id) - - [ZooKeeper](#zookeeper) - [微服务](#微服务) - [高并发](#高并发) - [消息队列](#消息队列) @@ -249,6 +249,14 @@ 1. [剖析面试最常见问题之 Netty(上)](https://xiaozhuanlan.com/topic/4028536971) 2. [剖析面试最常见问题之 Netty(下)](https://xiaozhuanlan.com/topic/3985146207) +#### ZooKeeper + +> 前两篇文章可能有内容重合部分,推荐都看一遍。 + +1. [【入门】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-intro.md) +2. [【进阶】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-plus.md) +3. [【实战】ZooKeeper 实战](docs/system-design/distributed-system/zookeeper/zookeeper-in-action.md) + ### 认证授权 **[《认证授权基础》](docs/system-design/authority-certification/basis-of-authority-certification.md)** 这篇文章中我会介绍认证授权常见概念: **Authentication**,**Authorization** 以及 **Cookie**、**Session**、Token、**OAuth 2**、**SSO** 。如果你不清楚这些概念的话,建议好好阅读一下这篇文章。 @@ -309,14 +317,6 @@ RPC 让调用远程服务调用像调用本地方法那样简单。 简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 -#### ZooKeeper - -> 前两篇文章可能有内容重合部分,推荐都看一遍。 - -1. [【入门】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-intro.md) -2. [【进阶】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-plus.md) -3. [【实战】ZooKeeper 实战](docs/system-design/distributed-system/zookeeper/zookeeper-in-action.md) - ### 微服务 1. [ 大白话入门 Spring Cloud](docs/system-design/micro-service/spring-cloud.md) From e924a377ce0947d8f8621d9258d9dd8c2de805b0 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 27 Nov 2020 15:52:56 +0800 Subject: [PATCH 15/22] Delete some-concepts-of-caching.md --- .../Redis/some-concepts-of-caching.md | 192 ------------------ 1 file changed, 192 deletions(-) delete mode 100644 docs/database/Redis/some-concepts-of-caching.md diff --git a/docs/database/Redis/some-concepts-of-caching.md b/docs/database/Redis/some-concepts-of-caching.md deleted file mode 100644 index 048afb3d..00000000 --- a/docs/database/Redis/some-concepts-of-caching.md +++ /dev/null @@ -1,192 +0,0 @@ - - - - -- [1. 缓存的基本思想](#1-缓存的基本思想) -- [2. 使用缓存为系统带来了什么问题](#2-使用缓存为系统带来了什么问题) -- [3. 本地缓存解决方案](#3-本地缓存解决方案) -- [4. 为什么要有分布式缓存?/为什么不直接用本地缓存?](#4-为什么要有分布式缓存为什么不直接用本地缓存) -- [5. 缓存读写模式/更新策略](#5-缓存读写模式更新策略) - - [5.1. Cache Aside Pattern(旁路缓存模式)](#51-cache-aside-pattern旁路缓存模式) - - [5.2. Read/Write Through Pattern(读写穿透)](#52-readwrite-through-pattern读写穿透) - - [5.3. Write Behind Pattern(异步缓存写入)](#53-write-behind-pattern异步缓存写入) - - - - -### 1. 缓存的基本思想 - -很多朋友,只知道缓存可以提高系统性能以及减少请求相应时间,但是,不太清楚缓存的本质思想是什么。 - -缓存的基本思想其实很简单,就是我们非常熟悉的空间换时间。不要把缓存想的太高大上,虽然,它的确对系统的性能提升的性价比非常高。 - -其实,我们在学习使用缓存的时候,你会发现缓存的思想实际在操作系统或者其他地方都被大量用到。 比如 **CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。** **再比如操作系统在 页表方案 基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器(Cache)。** - -回归到业务系统来说:**我们为了避免用户在请求数据的时候获取速度过于缓慢,所以我们在数据库之上增加了缓存这一层来弥补。** - -当别人再问你,缓存的基本思想的时候,就把上面 👆 这段话告诉他,我觉得会让别人对你刮目相看。 - -### 2. 使用缓存为系统带来了什么问题 - -**软件系统设计中没有银弹,往往任何技术的引入都像是把双刃剑。** 你使用的方式得当,就能为系统带来很大的收益。否则,只是费了精力不讨好。 - -简单来说,为系统引入缓存之后往往会带来下面这些问题: - -_ps:其实我觉得引入本地缓存来做一些简单业务场景的话,实际带来的代价几乎可以忽略,下面 👇 主要是针对分布式缓存来说的。_ - -1. **系统复杂性增加** :引入缓存之后,你要维护缓存和数据库的数据一致性、维护热点缓存等等。 -2. **系统开发成本往往会增加** :引入缓存意味着系统需要一个单独的缓存服务,这是需要花费相应的成本的,并且这个成本还是很贵的,毕竟耗费的是宝贵的内存。但是,如果你只是简单的使用一下本地缓存存储一下简单的数据,并且数据量不大的话,那么就不需要单独去弄一个缓存服务。 - -### 3. 本地缓存解决方案 - -_先来聊聊本地缓存,这个实际在很多项目中用的蛮多,特别是单体架构的时候。数据量不大,并且没有分布式要求的话,使用本地缓存还是可以的。_ - -常见的单体架构图如下,我们使用 **Nginx** 来做**负载均衡**,部署两个相同的服务到服务器,两个服务使用同一个数据库,并且使用的是本地缓存。 - -![单体架构](./images/redis-all/单体架构.png) - -_那本地缓存的方案有哪些呢?且听 Guide 给你来说一说。_ - -**一:JDK 自带的 `HashMap` 和 `ConcurrentHashMap` 了。** - -`ConcurrentHashMap` 可以看作是线程安全版本的 `HashMap` ,两者都是存放 key/value 形式的键值对。但是,大部分场景来说不会使用这两者当做缓存,因为只提供了缓存的功能,并没有提供其他诸如过期时间之类的功能。一个稍微完善一点的缓存框架至少要提供:**过期时间**、**淘汰机制**、**命中率统计**这三点。 - -**二: `Ehcache` 、 `Guava Cache` 、 `Spring Cache` 这三者是使用的比较多的本地缓存框架。** - -- `Ehcache` 的话相比于其他两者更加重量。不过,相比于 `Guava Cache` 、 `Spring Cache` 来说, `Ehcache` 支持可以嵌入到 hibernate 和 mybatis 作为多级缓存,并且可以将缓存的数据持久化到本地磁盘中、同时也提供了集群方案(比较鸡肋,可忽略)。 -- `Guava Cache` 和 `Spring Cache` 两者的话比较像。`Guava` 相比于 `Spring Cache` 的话使用的更多一点,它提供了 API 非常方便我们使用,同时也提供了设置缓存有效时间等功能。它的内部实现也比较干净,很多地方都和 `ConcurrentHashMap` 的思想有异曲同工之妙。 -- 使用 `Spring Cache` 的注解实现缓存的话,代码会看着很干净和优雅,但是很容易出现问题比如缓存穿透、内存溢出。 - -**三: 后起之秀 Caffeine。** - -相比于 `Guava` 来说 `Caffeine` 在各个方面比如性能要更加优秀,一般建议使用其来替代 `Guava` 。并且, `Guava` 和 `Caffeine` 的使用方式很像! - -本地缓存固然好,但是缺陷也很明显,比如多个相同服务之间的本地缓存的数据无法共享。 - -### 4. 为什么要有分布式缓存?/为什么不直接用本地缓存? - -本地的缓存的优势非常明显:**低依赖**、**轻量**、**简单**、**成本低**。 - -但是,本地缓存存在下面这些缺陷: - -1. **本地缓存对分布式架构支持不友好**,比如同一个相同的服务部署在多台机器上的时候,各个服务之间的缓存是无法共享的,因为本地缓存只在当前机器上有。 -2. **本地缓存容量受服务部署所在的机器限制明显。** 如果当前系统服务所耗费的内存多,那么本地缓存可用的容量就很少。 - -**我们可以把分布式缓存(Distributed Cache) 看作是一种内存数据库的服务,它的最终作用就是提供缓存数据的服务。** - -如下图所示,就是一个简单的使用分布式缓存的架构图。我们使用 Nginx 来做负载均衡,部署两个相同的服务到服务器,两个服务使用同一个数据库和缓存。 - -![集中式缓存架构](./images/redis-all/集中式缓存架构.png) - - - -使用分布式缓存之后,缓存部署在一台单独的服务器上,即使同一个相同的服务部署在再多机器上,也是使用的同一份缓存。 并且,单独的分布式缓存服务的性能、容量和提供的功能都要更加强大。 - -使用分布式缓存的缺点呢,也很显而易见,那就是你需要为分布式缓存引入额外的服务比如 Redis 或 Memcached,你需要单独保证 Redis 或 Memcached 服务的高可用。 - -### 5. 缓存读写模式/更新策略 - -**下面介绍到的三种模式各有优劣,不存在最佳模式,根据具体的业务场景选择适合自己的缓存读写模式。** - -#### 5.1. Cache Aside Pattern(旁路缓存模式) - -**Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。** - -Cache Aside Pattern 中服务端需要同时维系 DB 和 cache,并且是以 DB 的结果为准。 - -下面我们来看一下这个策略模式下的缓存读写步骤。 - -**写** : - -- 先更新 DB -- 然后直接删除 cache 。 - -简单画了一张图帮助大家理解写的步骤。 - -![cache-aside-write](images/缓存读写策略/cache-aside-write.png) - -**读** : - -- 从 cache 中读取数据,读取到就直接返回 -- cache中读取不到的话,就从 DB 中读取数据返回 -- 再把数据放到 cache 中。 - -简单画了一张图帮助大家理解读的步骤。 - -![cache-aside-read](images/缓存读写策略/cache-aside-read.png) - - - -你仅仅了解了上面这些内容的话是远远不够的,我们还要搞懂其中的原理。 - -比如说面试官很可能会追问:“**在写数据的过程中,可以先删除 cache ,后更新 DB 么?**” - -**答案:** 那肯定是不行的!因为这样可能会造成**数据库(DB)和缓存(Cache)数据不一致**的问题。为什么呢?比如说请求1 先写数据A,请求2随后读数据A的话就很有可能产生数据不一致性的问题。这个过程可以简单描述为: - -> 请求1先把cache中的A数据删除 -> 请求2从DB中读取数据->请求1再把DB中的A数据更新。 - -当你这样回答之后,面试官可能会紧接着就追问:“**在写数据的过程中,先更新DB,后删除cache就没有问题了么?**” - -**答案:** 理论上来说还是可能会出现数据不一致性的问题,不过概率非常小,因为缓存的写入速度是比数据库的写入速度快很多! - -比如请求1先读数据 A,请求2随后写数据A,并且数据A不在缓存中的话也有可能产生数据不一致性的问题。这个过程可以简单描述为: - -> 请求1从DB读数据A->请求2写更新数据 A 到数据库并把删除cache中的A数据->请求1将数据A写入cache。 - -现在我们再来分析一下 **Cache Aside Pattern 的缺陷**。 - -**缺陷1:首次请求数据一定不在 cache 的问题** - -解决办法:可以将热点数据可以提前放入cache 中。 - -**缺陷2:写操作比较频繁的话导致cache中的数据会被频繁被删除,这样会影响缓存命中率 。** - -解决办法: - -- 数据库和缓存数据强一致场景 :更新DB的时候同样更新cache,不过我们需要加一个锁/分布式锁来保证更新cache的时候不存在线程安全问题。 -- 可以短暂地允许数据库和缓存数据不一致的场景 :更新DB的时候同样更新cache,但是给缓存加一个比较短的过期时间,这样的话就可以保证即使数据不一致的话影响也比较小。 - -#### 5.2. Read/Write Through Pattern(读写穿透) - -Read/Write Through Pattern 中服务端把 cache 视为主要数据存储,从中读取数据并将数据写入其中。cache 服务负责将此数据读取和写入 DB,从而减轻了应用程序的职责。 - -这种缓存读写策略小伙伴们应该也发现了在平时在开发过程中非常少见。抛去性能方面的影响,大概率是因为我们经常使用的分布式缓存 Redis 并没有提供 cache 将数据写入DB的功能。 - -**写(Write Through):** - -- 先查 cache,cache 中不存在,直接更新 DB。 -- cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(**同步更新 cache 和 DB**)。 - -简单画了一张图帮助大家理解写的步骤。 - -![write-through](images/缓存读写策略/write-through.png) - -**读(Read Through):** - -- 从 cache 中读取数据,读取到就直接返回 。 -- 读取不到的话,先从 DB 加载,写入到 cache 后返回响应。 - -简单画了一张图帮助大家理解读的步骤。 - -![read-through](images/缓存读写策略/read-through.png) - -Read-Through Pattern 实际只是在 Cache-Aside Pattern 之上进行了封装。在 Cache-Aside Pattern 下,发生读请求的时候,如果 cache 中不存在对应的数据,是由客户端自己负责把数据写入 cache,而 Read Through Pattern 则是 cache 服务自己来写入缓存的,这对客户端是透明的。 - -和 Cache Aside Pattern 一样, Read-Through Pattern 也有首次请求数据一定不再 cache 的问题,对于热点数据可以提前放入缓存中。 - -#### 5.3. Write Behind Pattern(异步缓存写入) - -Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由 cache 服务来负责 cache 和 DB 的读写。 - -但是,两个又有很大的不同:**Read/Write Through 是同步更新 cache 和 DB,而 Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB。** - -很明显,这种方式对数据一致性带来了更大的挑战,比如cache数据可能还没异步更新DB的话,cache服务可能就就挂掉了。 - -这种策略在我们平时开发过程中也非常非常少见,但是不代表它的应用场景少,比如消息队列中消息的异步写入磁盘、MySQL 的 InnoDB Buffer Pool 机制都用到了这种策略。 - -Write Behind Pattern 下 DB 的写性能非常高,非常适合一些数据经常变化又对数据一致性要求没那么高的场景,比如浏览量、点赞量。 - - - - - From f2c3a98c5fe9753e82fc8e65c472f96045422d3c Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 27 Nov 2020 15:52:59 +0800 Subject: [PATCH 16/22] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 40c4729d..e7f101c7 100644 --- a/README.md +++ b/README.md @@ -212,7 +212,6 @@ ### Redis -1. [关于缓存的一些重要概念(Redis 前置菜)](docs/database/Redis/some-concepts-of-caching.md) 2. [Redis 常见问题总结](docs/database/Redis/redis-all.md) ## 系统设计 From 5fdb3f861756ede178407f9769c347864378bcb8 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 27 Nov 2020 16:57:02 +0800 Subject: [PATCH 17/22] =?UTF-8?q?[fix]=E5=9B=BE=E7=89=87=E5=9C=B0=E5=9D=80?= =?UTF-8?q?=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Java集合框架常见面试题.md | 229 +----------------- 1 file changed, 1 insertion(+), 228 deletions(-) diff --git a/docs/java/collection/Java集合框架常见面试题.md b/docs/java/collection/Java集合框架常见面试题.md index fe58927f..0f490ace 100644 --- a/docs/java/collection/Java集合框架常见面试题.md +++ b/docs/java/collection/Java集合框架常见面试题.md @@ -10,11 +10,6 @@ - [1.1.3.3. Map](#1133-map) - [1.1.4. 如何选用集合?](#114-如何选用集合) - [1.1.5. 为什么要使用集合?](#115-为什么要使用集合) - - [1.1.6. Iterator 迭代器](#116-iterator-迭代器) - - [1.1.6.1. 迭代器 Iterator 是什么?](#1161-迭代器-iterator-是什么) - - [1.1.6.2. 迭代器 Iterator 有啥用?](#1162-迭代器-iterator-有啥用) - - [1.1.6.3. 如何使用?](#1163-如何使用) - - [1.1.7. 有哪些集合是线程不安全的?怎么解决呢?](#117-有哪些集合是线程不安全的怎么解决呢) - [1.2. Collection 子接口之 List](#12-collection-子接口之-list) - [1.2.1. Arraylist 和 Vector 的区别?](#121-arraylist-和-vector-的区别) - [1.2.2. Arraylist 与 LinkedList 区别?](#122-arraylist-与-linkedlist-区别) @@ -46,13 +41,6 @@ - [1.5.1. 排序操作](#151-排序操作) - [1.5.2. 查找,替换操作](#152-查找替换操作) - [1.5.3. 同步控制](#153-同步控制) - - [1.6. 其他重要问题](#16-其他重要问题) - - [1.6.1. 什么是快速失败(fail-fast)?](#161-什么是快速失败fail-fast) - - [1.6.2. 什么是安全失败(fail-safe)呢?](#162-什么是安全失败fail-safe呢) - - [1.6.3. Arrays.asList()避坑指南](#163-arraysaslist避坑指南) - - [1.6.3.1. 简介](#1631-简介) - - [1.6.3.2. 《阿里巴巴 Java 开发手册》对其的描述](#1632-阿里巴巴-java-开发手册对其的描述) - - [1.6.3.3. 使用时的注意事项总结](#1633-使用时的注意事项总结) @@ -112,58 +100,7 @@ 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。 数组的缺点是一旦声明之后,长度就不可变了;同时,声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重复的,特点单一。 -但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据 - -### 1.1.6. Iterator 迭代器 - -#### 1.1.6.1. 迭代器 Iterator 是什么? - -```java -public interface Iterator { - //集合中是否还有元素 - boolean hasNext(); - //获得集合中的下一个元素 - E next(); - ...... -} -``` - -`Iterator` 对象称为迭代器(设计模式的一种),迭代器可以对集合进行遍历,但每一个集合内部的数据结构可能是不尽相同的,所以每一个集合存和取都很可能是不一样的,虽然我们可以人为地在每一个类中定义 `hasNext()` 和 `next()` 方法,但这样做会让整个集合体系过于臃肿。于是就有了迭代器。 - -迭代器是将这样的方法抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做就规定了整个集合体系的遍历方式都是 `hasNext()`和`next()`方法,使用者不用管怎么实现的,会用即可。迭代器的定义为:提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。 - -#### 1.1.6.2. 迭代器 Iterator 有啥用? - -`Iterator` 主要是用来遍历集合用的,它的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 `ConcurrentModificationException` 异常。 - -#### 1.1.6.3. 如何使用? - -我们通过使用迭代器来遍历 `HashMap`,演示一下 迭代器 Iterator 的使用。 - -```java - -Map map = new HashMap(); -map.put(1, "Java"); -map.put(2, "C++"); -map.put(3, "PHP"); -Iterator> iterator = map.entrySet().iterator(); -while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - System.out.println(entry.getKey() + entry.getValue()); -} -``` - -### 1.1.7. 有哪些集合是线程不安全的?怎么解决呢? - -我们常用的 `Arraylist` ,`LinkedList`,`Hashmap`,`HashSet`,`TreeSet`,`TreeMap`,`PriorityQueue` 都不是线程安全的。解决办法很简单,可以使用线程安全的集合来代替。 - -如果你要使用线程安全的集合的话, `java.util.concurrent` 包中提供了很多并发容器供你使用: - -1. `ConcurrentHashMap`: 可以看作是线程安全的 `HashMap` -2. `CopyOnWriteArrayList`:可以看作是线程安全的 `ArrayList`,在读多写少的场合性能非常好,远远好于 `Vector`. -3. `ConcurrentLinkedQueue`:高效的并发队列,使用链表实现。可以看做一个线程安全的 `LinkedList`,这是一个非阻塞队列。 -4. `BlockingQueue`: 这是一个接口,JDK 内部通过链表、数组等方式实现了这个接口。表示阻塞队列,非常适合用于作为数据共享的通道。 -5. `ConcurrentSkipListMap` :跳表的实现。这是一个`Map`,使用跳表的数据结构进行快速查找。 +但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。 ## 1.2. Collection 子接口之 List @@ -675,170 +612,6 @@ synchronizedMap(Map m) //返回由指定映射支持的同步(线程安 synchronizedSet(Set s) //返回指定 set 支持的同步(线程安全的)set。 ``` -## 1.6. 其他重要问题 - -### 1.6.1. 什么是快速失败(fail-fast)? - -**快速失败(fail-fast)** 是 Java 集合的一种错误检测机制。**在使用迭代器对集合进行遍历的时候,我们在多线程下操作非安全失败(fail-safe)的集合类可能就会触发 fail-fast 机制,导致抛出 `ConcurrentModificationException` 异常。 另外,在单线程下,如果在遍历过程中对集合对象的内容进行了修改的话也会触发 fail-fast 机制。** - -> 注:增强 for 循环也是借助迭代器进行遍历。 - -举个例子:多线程下,如果线程 1 正在对集合进行遍历,此时线程 2 对集合进行修改(增加、删除、修改),或者线程 1 在遍历过程中对集合进行修改,都会导致线程 1 抛出 `ConcurrentModificationException` 异常。 - -**为什么呢?** - -每当迭代器使用 `hashNext()`/`next()`遍历下一个元素之前,都会检测 `modCount` 变量是否为 `expectedModCount` 值,是的话就返回遍历;否则抛出异常,终止遍历。 - -如果我们在集合被遍历期间对其进行修改的话,就会改变 `modCount` 的值,进而导致 `modCount != expectedModCount` ,进而抛出 `ConcurrentModificationException` 异常。 - -> 注:通过 `Iterator` 的方法修改集合的话会修改到 `expectedModCount` 的值,所以不会抛出异常。 - -```java -final void checkForComodification() { - if (modCount != expectedModCount) - throw new ConcurrentModificationException(); -} -``` - -好吧!相信大家已经搞懂了快速失败(fail-fast)机制以及它的原理。 - -我们再来趁热打铁,看一个阿里巴巴手册相关的规定: - -![](images/ad28e3ba-e419-4724-869c-73879e604da1.png) - -有了前面讲的基础,我们应该知道:使用 `Iterator` 提供的 `remove` 方法,可以修改到 `expectedModCount` 的值。所以,才不会再抛出`ConcurrentModificationException` 异常。 - -### 1.6.2. 什么是安全失败(fail-safe)呢? - -明白了快速失败(fail-fast)之后,安全失败(fail-safe)我们就很好理解了。 - -采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。所以,在遍历过程中对原集合所作的修改并不能被迭代器检测到,故不会抛 `ConcurrentModificationException` 异常。 - -### 1.6.3. Arrays.asList()避坑指南 - -最近使用`Arrays.asList()`遇到了一些坑,然后在网上看到这篇文章:[Java Array to List Examples](http://javadevnotes.com/java-array-to-list-examples) 感觉挺不错的,但是还不是特别全面。所以,自己对于这块小知识点进行了简单的总结。 - -#### 1.6.3.1. 简介 - -`Arrays.asList()`在平时开发中还是比较常见的,我们可以使用它将一个数组转换为一个 List 集合。 - -```java -String[] myArray = { "Apple", "Banana", "Orange" }; -List myList = Arrays.asList(myArray); -//上面两个语句等价于下面一条语句 -List myList = Arrays.asList("Apple","Banana", "Orange"); -``` - -JDK 源码对于这个方法的说明: - -```java -/** - *返回由指定数组支持的固定大小的列表。此方法作为基于数组和基于集合的API之间的桥梁,与 Collection.toArray()结合使用。返回的List是可序列化并实现RandomAccess接口。 - */ -public static List asList(T... a) { - return new ArrayList<>(a); -} -``` - -#### 1.6.3.2. 《阿里巴巴 Java 开发手册》对其的描述 - -`Arrays.asList()`将数组转换为集合后,底层其实还是数组,《阿里巴巴 Java 开发手册》对于这个方法有如下描述: - -![阿里巴巴Java开发手-Arrays.asList()方法]() - -#### 1.6.3.3. 使用时的注意事项总结 - -**传递的数组必须是对象数组,而不是基本类型。** - -`Arrays.asList()`是泛型方法,传入的对象必须是对象数组。 - -```java -int[] myArray = { 1, 2, 3 }; -List myList = Arrays.asList(myArray); -System.out.println(myList.size());//1 -System.out.println(myList.get(0));//数组地址值 -System.out.println(myList.get(1));//报错:ArrayIndexOutOfBoundsException -int [] array=(int[]) myList.get(0); -System.out.println(array[0]);//1 -``` - -当传入一个原生数据类型数组时,`Arrays.asList()` 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时 List 的唯一元素就是这个数组,这也就解释了上面的代码。 - -我们使用包装类型数组就可以解决这个问题。 - -```java -Integer[] myArray = { 1, 2, 3 }; -``` - -**使用集合的修改方法:`add()`、`remove()`、`clear()`会抛出异常。** - -```java -List myList = Arrays.asList(1, 2, 3); -myList.add(4);//运行时报错:UnsupportedOperationException -myList.remove(1);//运行时报错:UnsupportedOperationException -myList.clear();//运行时报错:UnsupportedOperationException -``` - -`Arrays.asList()` 方法返回的并不是 `java.util.ArrayList` ,而是 `java.util.Arrays` 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法。 - -```java -List myList = Arrays.asList(1, 2, 3); -System.out.println(myList.getClass());//class java.util.Arrays$ArrayList -``` - -下图是`java.util.Arrays$ArrayList`的简易源码,我们可以看到这个类重写的方法有哪些。 - -```java - private static class ArrayList extends AbstractList - implements RandomAccess, java.io.Serializable - { - ... - - @Override - public E get(int index) { - ... - } - - @Override - public E set(int index, E element) { - ... - } - - @Override - public int indexOf(Object o) { - ... - } - - @Override - public boolean contains(Object o) { - ... - } - - @Override - public void forEach(Consumer action) { - ... - } - - @Override - public void replaceAll(UnaryOperator operator) { - ... - } - - @Override - public void sort(Comparator c) { - ... - } - } -``` - -我们再看一下`java.util.AbstractList`的`remove()`方法,这样我们就明白为啥会抛出`UnsupportedOperationException`。 - -```java -public E remove(int index) { - throw new UnsupportedOperationException(); -} -``` - **《Java面试突击》:** Java 程序员面试必备的《Java面试突击》V3.0 PDF 版本扫码关注下面的公众号,在后台回复 **"面试突击"** 即可免费领取! From 07b18f80b0c6611e71b7db022336518c58173a21 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 27 Nov 2020 17:24:49 +0800 Subject: [PATCH 18/22] =?UTF-8?q?Update=202020=E6=9C=80=E6=96=B0Java?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E8=BF=9B=E9=98=B6=E5=B8=B8=E8=A7=81=E9=9D=A2?= =?UTF-8?q?=E8=AF=95=E9=A2=98=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2020最新Java并发进阶常见面试题总结.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md b/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md index e5561246..8ac04a67 100644 --- a/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md +++ b/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md @@ -968,12 +968,12 @@ protected final boolean compareAndSetState(int expect, int update) { **AQS 定义两种资源共享方式** -- **Exclusive**(独占):只有一个线程能执行,如 ReentrantLock。又可分为公平锁和非公平锁: +- **Exclusive**(独占):只有一个线程能执行,如 `ReentrantLock`。又可分为公平锁和非公平锁: - 公平锁:按照线程在队列中的排队顺序,先到者先拿到锁 - 非公平锁:当线程要获取锁时,无视队列顺序直接去抢锁,谁抢到就是谁的 -- **Share**(共享):多个线程可同时执行,如 Semaphore/CountDownLatch。Semaphore、CountDownLatch、 CyclicBarrier、ReadWriteLock 我们都会在后面讲到。 +- **Share**(共享):多个线程可同时执行,如` CountDownLatch`、`Semaphore`、`CountDownLatch`、 `CyclicBarrier`、`ReadWriteLock` 我们都会在后面讲到。 -ReentrantReadWriteLock 可以看成是组合式,因为 ReentrantReadWriteLock 也就是读写锁允许多个线程同时对某一资源进行读。 +`ReentrantReadWriteLock` 可以看成是组合式,因为 `ReentrantReadWriteLock` 也就是读写锁允许多个线程同时对某一资源进行读。 不同的自定义同步器争用共享资源的方式也不同。自定义同步器在实现时只需要实现共享资源 state 的获取与释放方式即可,至于具体线程等待队列的维护(如获取资源失败入队/唤醒出队等),AQS 已经在顶层实现好了。 @@ -981,7 +981,7 @@ ReentrantReadWriteLock 可以看成是组合式,因为 ReentrantReadWriteLock 同步器的设计是基于模板方法模式的,如果需要自定义同步器一般的方式是这样(模板方法模式很经典的一个应用): -1. 使用者继承 AbstractQueuedSynchronizer 并重写指定的方法。(这些重写方法很简单,无非是对于共享资源 state 的获取和释放) +1. 使用者继承 `AbstractQueuedSynchronizer` 并重写指定的方法。(这些重写方法很简单,无非是对于共享资源 state 的获取和释放) 2. 将 AQS 组合在自定义同步组件的实现中,并调用其模板方法,而这些模板方法会调用使用者重写的方法。 这和我们以往通过实现接口的方式有很大区别,这是模板方法模式很经典的一个运用。 @@ -1001,7 +1001,7 @@ tryReleaseShared(int)//共享方式。尝试释放资源,成功则返回true 以 ReentrantLock 为例,state 初始化为 0,表示未锁定状态。A 线程 lock()时,会调用 tryAcquire()独占该锁并将 state+1。此后,其他线程再 tryAcquire()时就会失败,直到 A 线程 unlock()到 state=0(即释放锁)为止,其它线程才有机会获取该锁。当然,释放锁之前,A 线程自己是可以重复获取此锁的(state 会累加),这就是可重入的概念。但要注意,获取多少次就要释放多么次,这样才能保证 state 是能回到零态的。 -再以 CountDownLatch 以例,任务分为 N 个子线程去执行,state 也初始化为 N(注意 N 要与线程个数一致)。这 N 个子线程是并行执行的,每个子线程执行完后 countDown()一次,state 会 CAS(Compare and Swap)减 1。等到所有子线程都执行完后(即 state=0),会 unpark()主调用线程,然后主调用线程就会从 await()函数返回,继续后余动作。 +再以 `CountDownLatch` 以例,任务分为 N 个子线程去执行,state 也初始化为 N(注意 N 要与线程个数一致)。这 N 个子线程是并行执行的,每个子线程执行完后` countDown()` 一次,state 会 CAS(Compare and Swap)减 1。等到所有子线程都执行完后(即 state=0),会 unpark()主调用线程,然后主调用线程就会从 `await()` 函数返回,继续后余动作。 一般来说,自定义同步器要么是独占方法,要么是共享方式,他们也只需实现`tryAcquire-tryRelease`、`tryAcquireShared-tryReleaseShared`中的一种即可。但 AQS 也支持自定义同步器同时实现独占和共享两种方式,如`ReentrantReadWriteLock`。 From a4f500c1d46193808aecd7570824e0dc64273138 Mon Sep 17 00:00:00 2001 From: guide Date: Fri, 27 Nov 2020 17:24:51 +0800 Subject: [PATCH 19/22] =?UTF-8?q?Update=20Java=E5=9F=BA=E7=A1=80=E7=9F=A5?= =?UTF-8?q?=E8=AF=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/basis/Java基础知识.md | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/docs/java/basis/Java基础知识.md b/docs/java/basis/Java基础知识.md index ca79e044..da60ba36 100644 --- a/docs/java/basis/Java基础知识.md +++ b/docs/java/basis/Java基础知识.md @@ -53,8 +53,6 @@ - [2.3. 修饰符](#23-修饰符) - [2.3.1. 在一个静态方法内调用一个非静态成员为什么是非法的?](#231-在一个静态方法内调用一个非静态成员为什么是非法的) - [2.3.2. 静态方法和实例方法有何不同](#232-静态方法和实例方法有何不同) - - [2.4. 接口和抽象类](#24-接口和抽象类) - - [2.4.1. 接口和抽象类的区别是什么?](#241-接口和抽象类的区别是什么) - [2.5. 其它重要知识点](#25-其它重要知识点) - [2.5.1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?](#251-string-stringbuffer-和-stringbuilder-的区别是什么-string-为什么是不可变的) - [2.5.2. Object 类的常见方法总结](#252-object-类的常见方法总结) @@ -798,7 +796,6 @@ Java 程序设计语言对对象采用的不是引用调用,实际上,对象 | 发生阶段 | 编译期 | 运行期 | - **方法的重写要遵循“两同两小一大”**(以下内容摘录自《疯狂 Java 讲义》,[issue#892](https://github.com/Snailclimb/JavaGuide/issues/892) ): - “两同”即方法名相同、形参列表相同; @@ -986,27 +983,6 @@ public class Student { 2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。 -### 2.4. 接口和抽象类 - -#### 2.4.1. 接口和抽象类的区别是什么? - -1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。 -2. 接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。 -3. 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字扩展多个接口。 -4. 接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。 -5. 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。 - -> 备注: -> -> 1. 在 JDK8 中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,则必须重写,不然会报错。(详见 issue:[https://github.com/Snailclimb/JavaGuide/issues/146](https://github.com/Snailclimb/JavaGuide/issues/146)。 -> 2. jdk9 的接口被允许定义私有方法 。 - -总结一下 jdk7~jdk9 Java 中接口概念的变化([相关阅读](https://www.geeksforgeeks.org/private-methods-java-9-interfaces/)): - -1. 在 jdk 7 或更早版本中,接口里面只能有常量变量和抽象方法。这些接口方法必须由选择实现接口的类实现。 -2. jdk8 的时候接口可以有默认方法和静态方法功能。 -3. Jdk 9 在接口中引入了私有方法和私有静态方法。 - ### 2.5. 其它重要知识点 #### 2.5.1. String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的? From 1b85c6990acdd242f105d9c98212dc525d562b14 Mon Sep 17 00:00:00 2001 From: guide Date: Sat, 28 Nov 2020 21:33:22 +0800 Subject: [PATCH 20/22] =?UTF-8?q?Update=20BIO,NIO,AIO=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/basis/BIO,NIO,AIO总结.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/java/basis/BIO,NIO,AIO总结.md b/docs/java/basis/BIO,NIO,AIO总结.md index 61bf7da4..cf7b4fb0 100644 --- a/docs/java/basis/BIO,NIO,AIO总结.md +++ b/docs/java/basis/BIO,NIO,AIO总结.md @@ -14,8 +14,8 @@ - [1)Non-blocking IO(非阻塞IO)](#1non-blocking-io非阻塞io) - [2)Buffer\(缓冲区\)](#2buffer缓冲区) - [3)Channel \(通道\)](#3channel-通道) - - [4)Selectors\(选择器\)](#4selectors选择器) - - [2.3 NIO 读数据和写数据方式](#23--nio-读数据和写数据方式) + - [4)Selectors\(选择器\)](#4selector-选择器) + - [2.3 NIO 读数据和写数据方式](#23-nio-读数据和写数据方式) - [2.4 NIO核心组件简单介绍](#24-nio核心组件简单介绍) - [2.5 代码示例](#25-代码示例) - [3. AIO \(Asynchronous I/O\)](#3-aio-asynchronous-io) From d8169c5e376c83e7e11f414d6875d653a47a7d10 Mon Sep 17 00:00:00 2001 From: Lshare Date: Sat, 28 Nov 2020 22:48:57 +0800 Subject: [PATCH 21/22] =?UTF-8?q?Update=202020=E6=9C=80=E6=96=B0Java?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E8=BF=9B=E9=98=B6=E5=B8=B8=E8=A7=81=E9=9D=A2?= =?UTF-8?q?=E8=AF=95=E9=A2=98=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2020最新Java并发进阶常见面试题总结.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md b/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md index 8ac04a67..fa5afa3e 100644 --- a/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md +++ b/docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md @@ -843,14 +843,14 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是 **引用类型** - AtomicReference:引用类型原子类 -- AtomicStampedReference:原子更新引用类型里的字段原子类 +- AtomicStampedReference:原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。 - AtomicMarkableReference :原子更新带有标记位的引用类型 **对象的属性修改类型** - AtomicIntegerFieldUpdater:原子更新整形字段的更新器 - AtomicLongFieldUpdater:原子更新长整形字段的更新器 -- AtomicStampedReference:原子更新带有版本号的引用类型。该类将整数值与引用关联起来,可用于解决原子的更新数据和数据的版本号,可以解决使用 CAS 进行原子更新时可能出现的 ABA 问题。 +- AtomicReferenceFieldUpdater:原子更新引用类型字段的更新器 ### 5.3. 讲讲 AtomicInteger 的使用 From b0e2d2879da269732a1a89db072ff0901d9e230a Mon Sep 17 00:00:00 2001 From: Evan Wu Date: Sun, 29 Nov 2020 00:41:26 +0800 Subject: [PATCH 22/22] typo --- docs/network/计算机网络.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/network/计算机网络.md b/docs/network/计算机网络.md index 5c0e3e25..cbd9f0d9 100644 --- a/docs/network/计算机网络.md +++ b/docs/network/计算机网络.md @@ -38,7 +38,7 @@ 这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称. -互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Protocol)和许多路由选择协议,因此互联网的网络层也叫做**网际层**或**IP层**。 +互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Internet Protocol)和许多路由选择协议,因此互联网的网络层也叫做**网际层**或**IP层**。 ### 1.4 数据链路层 **数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。** 在两个相邻节点之间传送数据时,**数据链路层将网络层交下来的 IP 数据报组装成帧**,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。