너무 괜찮은 자료라서 펌질 함.!!

Spark 의 핵심은 무엇인가? RDD! (RDD paper review) from Yongho Ha


Posted by '김용환'
,





Amazon에서 Nosql 인 Dynamo DB를 출시했다.

http://aws.amazon.com/dynamodb/
http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Introduction.html?r=5435



모든 데이터는 SSD에 저장하고 AZ 에 자동으로 복제가 되게 하여 HA가 되게 했다고 한다.

가격도 상당히 싸다.




Amazon의 CTO 분의 블로그(http://www.allthingsdistributed.com/2012/01/amazon-dynamodb.html) 에 자세힌 내용이 담겨있다. 내 눈에 눈의 띈 부분을 발췌하면 다음과 같다. (역시 관찰력이 Creative하게 하는 것 같다..)

2007년 21st ACM Symposium on Operating Systems Principles 에서 발표한 Dynamo: Amazon’s Highly Available Key-value Store에 대한 정체 ("http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf")를 발표했었는데. 드디어 그 결실을 맺었다. 

DynamoDB의 가장 중요한 요구사항은 Scale과 성능상 Predictable 이었다. SimpleDB를 운영하면서 고객들이 어디서 불편함을 느꼈는지 하나하나 잘 분석했다.

고객들이 Simple DB를 쉽게 사용할 수 있다는 점, 복잡한 쿼리나 TX를 쓰지 않는 부분을 많이 성공했는데, 고객들은 Scale 이슈나 용량 제한으로 인해서 많이 부담을 느꼈다고 한다. 또한 성능 예측성, Consistency, 가격의 합리성(Pricing Complexity) 관점에서 수정하려고 애를 썼다.

이렇게 해서 DynamoDB가 출시되었다. 



마치며..
DynamoDB 가 나오면서 기존 DB 사로부터의 강력한 라이벌이 되지 않을까 생각이 든다. 가격이 생각보다 Reasonable했고 그동안의 Amazon의 Simple DB가 거의 장애가 나지 않았음을 볼 때 시장에 엄청난 일이 벌어지지 않을까 생각이 된다.


Posted by '김용환'
,

Netflix’s Transition to High-Availability Storage Systems을 보고 빠른 내용으로 요점 정리한 내용이다.

Oracle DB(RDB)의 데이터를 아마존의 AWS의 Simple DB로 전환하면서 고민했던 내용이 담겨있어서, 참조하기에 아주 좋은 경험담이다.  또한 Simple DB에 대한 이해도를 높일 수 있다. 

2008년 Netflix는 이미 데이터센터를 가지고 잇었다. 만약 이게 문제가 나면(single of failure), 서비스 장애가 되는 구조였다. 점점 서비스 트래픽이 올라감에 따라 파워, 공간, 품질과 가용성을 높이기 위해서 2010년 Netflix는 새로운 데이터센터를 지을지 아웃소싱할지 고려하였다.

용량과 스케일 관점으로 보고, 결국 아웃소싱 클라이드인 아마존 AWS를 선택했다.
계획은  오라클의 데이터를 AWS의 DB로 이동시키고, Web Server App들도 AWS의 서버에 App으로 이전하는
것으로 했다.  실제 마이그레이션 작업은 한달정도 걸렸다.

SimpleDB와 S3가 아래의 기능이 있었기 때문에 가능했다.
• Disaster Recovery
• Managed Fail-over and Fail-back
• Distribution (i.e. cross-zone, not cross-region currently)
• Persistence
• Eventual Consistency1
• Support for a subset of SQL

CAP에 AP만 고려했고, AWS에서 동작하며 분산처리 되는 것이 SiimpleDB와 S3였다. Simple DB가 가장 적합했지만, 큰 데이터가 들어올 때는 S3를 이용했다. Simple DB의 schema-less한 기능을 가지고 value값에 attribute을 여러개를 넣어서 정보를 저장했다.

RDB의 relation을 Simple DB로의 정규화(Normalization)을 진행했다.  
1차 정규화는 레코드 타입의 모든 정보는 모두 넣는다. 그러나 반복되는 필드나 그룹은 제외한다.
2차 정규화는 key의 subset에 대해서 관련있는 필드값이 오면 따로 뺀다.

즉, 아래와 같은 테이블이 존재한다.
park, warehouse, quantity, warehouse-address
여기서 part, warehouse-> quantity, warehouse-> warehouse-address의 의존도를 가지면,
테이블을 분리한다.
table1)
park, warehouse, quantity
table2)
warehouse, warehouse-adress

이렇게 하면서 단점이 생긴 부분들은 4가지이다.
첫번째 하나의 테이블을 둘로 나누면서 공간이 많이 사용했다.
두번째 하나 에서 수정할 것을 둘로 나누어서 수정해야 했다.
세번째 둘로 수정이 가하다 보니 inconsistency가 존재할 수 있다.
네번째, warehouse가 없을때는 row를 가지지 않는다. 이 때문에 warehouse-address에 대한 손실이 있을 수 있었다.

이렇게 하면서 겪은 것을 정리하면,
RDB를 key-value로 마이그레이션하는 것은 어렵다. 주의 깊게 잘 정의 해야 한다.

DB에 있는 기능 중 Simple DB에 없는 것이 있다.
DB의 Transaction은 Simple DB에서는 Conditional put/delete 를 할 수 있고, Cassandra는 Batch mutate + colution에 모두 write 하는 기능을 사용해서 해결 가능하다.
schema-less한게 모호함을 줄 수 있는데, schema validator를 만들어서 올린다.
Sequence가 없으니. Simple의 UUID라는 것을 이용한다. 만약 ordering을 하려면, distributed sequence generator 또는 클라이언트에서 보낸 timestamp값을 가지고 odering을 한다.

PL/SQL, Trigger는 포기한다.
CLOCKs는 NTP로 대체한다.

그러면, constraint와 foreign key는 어플단에서 구현해야 한다.



simple DB는 오라클의 좋은 기능들 (backup, recovery, native type, 내부 함수[soring, condition], limit partitioning, NULL, Write 속도)이 없고, case sensitive해서 attribute name때문에 장애로 이어질 수 있다.

Simple DB의 sparse-table은 null이 index가 되지 않아서, 다음과 같은 쿼리는 full scan이 된다.
"select field1 from domain where fild2 is null"
(그리고, null값이 들어간 테이블을 소팅하면 attribute 정보가 유실될 수 있으니, 아래와 같이..)

이것은 field2_null 이라는 필드를 만들어서, null 체크하는 값을 넣어야 한다.
select field1 from domain where field2_null ='y'


Simple DB의 성능은 index selectivity에 있다.

index selectivity = 전체 distinct한 atrribute / item 개수

즉 distict한 값이 1에 가까워야 성능이 좋다. 만약 distinct한 값이 적으면 성능은 안좋다.

하나의 10G 또는 10억 으로 제한이 걸려있는 Simple DB의 데이터를 다 쓰지 말고, 적당히 스케일링 해서 나눈다.(shard) 가능한 Write 의 scale을 지원하는 BatchPutAttribute과 BatchDeleteAttributes 함수를 사용해라.

DB의 replication은 최근 데이터를 5초마다 Oracle에 poll하면서 이루어진다.

이렇게 Netflix는 AWS의 리소스를 잘 활용하여 서비스에 집중하고 있다. 만약 DB가 필요하다면 RDS를 쓸 것이다.



2010년까지는 이렇게 말했지만. 2011년에는 약간 달라졌다.
PPT를 보면, RDS 대신 Cassandra를 선택한 것으로 보인다. Simple DB보다 데이터를 저장하는 형태(Colum Family)가 더 좋고 CAP의 AP를 추구하고 있다는 점에서 선택한 것으로 보인다.



 카산드라 API 중. Netflix 가 사용했던 API를 소개한다.
- 중간에 다시 보기 (Quorum)
datastore.get("Netflix", "Sid_Anand", Streaming Bookmarks -> Tron, ConsistencyLevel.QUORUM)

- 언제 회수되었나 (Fastest)
datastore.get_slice("Ntflix", "Sid_Anand", (DVD) Rental History -> 5678, ["Ship_TS", "Return_TS"], ConsistencyLevel.ONE)

- 얼마나 많이 DVD를 빌렸나? (fatest read)
datastore.get_count("Netflix", "Sid_Anand", (DVD)Rental History, ConsistencyLevel.ONE)

- write
datastore.batch_mutate("Netflix", mutation_map, ConsistencyLevel.QUORUM)

빠른 검색을 위해서 rows와 top-level columns은 저장되고, 인덱스된다. 또한. 다음의 것들은 큰 도움이 된다.
 - Row : Bloom Filter
 - Key Cache
 - OS Page Cache를 크게 잡음

disk 읽는 것과 compaction이 일어날 만한 것이 있으면 성능이 나빠진다.
(카산드라는 Bigle Table에서 영향을 받았기 때문에 Hbase나 Amazone의 Dynnamo와 비슷하다.)




분산처리 모델은 총 5개를 참고했다 했다.
- Merkle Trees + Gossip -> Anti-Entropy (peer단위 전염 이론에 근거해 여러 개의 node가 최신 데이터로 복제하게함)
- Read-Repair(정합성이 깨지면 최신데이터로 복구)
- Consistent Hashing
- Staged Event Dreiven Architecture paper
- Dynamo paper

Netflix에게는 Cassandra 가 좋은 이유
1. Rich Value Model : value는 set of column 또는 super-column이다.
2. Data Limit이 없다.
  SimpleDB은 제한이 있다. 1 item당 256 attributes, 1 domain당 1 billion attributes, 1 KB attribute value length
3. 데이터가 점점 커지면서 클러스터링이나 reshading이 관리 가능한 장점
 Simple DB는 하나하나 개발자가 하나하나 해줘야 한다.
4. 타입 처리가 편함
 Simple DB는 모두 UTF-8 스트링이지만, Cassandra는 native type과 소팅을 위한 type이 있음. 그리고, byte[]가 존재
5. 오픈 소스이고, 자바이다.
backup & recovery, recovery 정책을 마음대로 할 수 있다. 얼랭이 쿨하지만, 자바는 최고이다.
6. update-delete 변칙이 없다.
7. Consistency와 Avaiabilty에 대한 tradeoff를 조절할 수 있다.
 - Strong consistency :  Quorum Read/Write(중간 보던 영화 다시 보기)
 - Eventual consistency 
      R=1, W=1 (fastest read and fastest write)
      R=1, W=QUORUM (fastest read and potentially-slowser write)
      R=QUORUM, W=1 (potentially-slower read and fastest write)



Netflix의 NoSQL Use-cases  =  public NoSQL +  public cloud +  customer traffic +  R/W workload +   high traffic conditions




중요 레퍼런스 :
https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxwcmFjdGljYWxjbG91ZGNvbXB1dGluZ3xneDo2NDc2ODVjY2ExY2Y1Zjcz

PDF 파운 ->
https://sites.google.com/site/practicalcloudcomputing/index/Netflix%E2%80%99sTransitiontoaKey_v3.1.pdf?attredirects=0&d=1

요약기사
http://highscalability.com/blog/2010/10/22/paper-netflixs-transition-to-high-availability-storage-syste.html


참고 레퍼런스

1. http://techblog.netflix.com/2011/03/nosql-netflix-talk-part-1.html
2. http://wiki.apache.org/cassandra/API




Posted by '김용환'
,

미국의 오프라인 DVD 매장을 사라지게 한 Netflix 온라인 싸이트의 기술 배경을 설명한다.
인터넷을 통해서 TV 나 DVD 를 볼 수 있도록 하는 서비스이다. webkit을 UI 프레임웍으로 쓰는 것으로만 알고 있었는데. 자료들을 보니. 아마존 클라우드를 이용해서 서비스가 되고 있었다.

관련 내용을 OSCON 2011에서 발표했다. 





발번역 시작한다.

* Data Plane
- S3에 Asset(HD Video, Audio, 자막)을 copy해 둔다.
- EC2을 이용해서 인코딩한다. (비디오/비디오 스피드, 포맷, 볼수 있는 50개의 파일로 분리)
- 많은 데이터들은 CDN(Akamai, LimeLight, LEVEL3)를 이용한다. 
- Performance 그래프
 


* Control Plane
- Metadata Curation (ynopsis, 장르, 태그, 번역) 을 다양한 언어로  보여준다. 
- in-house용 Mysql 기반의 Metadata Editor 작성 S3로 export함
- metadata는 S3에 저장하고 최대한 RAM에 올림
- 10개의 GB Head을 가진 Tomcat을 기반으로하는 플랫폼으로 가지고 있으며, Tomcat간에는 REST를 서로 호출한다. 
- s3 안에 petabyte 로그 정보가 있음.
  Hadoop 기반의 분산되어 있는 로그 파일을 수집하는 Chukwa와 Hive 분석 솔루션을 가지고 분석가능함


* 저장 툴
- Mysql
- Canssandra.
   1. 회원 관리에 사용. 세계 4군데로 나누어서 정보를 관리
   2. 북마킹
   3. 개인 정보 (선호, 보고싶은 영화)
- 로그 분석
   1. 로그 처리 및 데이터 추출 (AWS Elastic Map Reduce, Hive 이용)
   2. Cassandra / brisk 를 teradata로 추출



좀 더 자세한 정보를 보려고 했더니. slideshare에 있었다. 
Velocity Conference 2011에 발표했던 자료이다. 



Posted by '김용환'
,
Posted by '김용환'
,
Posted by '김용환'
,



올해 2월에 만듦. slideshare에 올려놓음.
Posted by '김용환'
,


만드니라 겁나 빡셌음..
기준은 2011.3월쯤

Posted by '김용환'
,

Amazon Paas API 조사

Clouding 2010. 10. 29. 13:43



전체 볼 수 있는  Documentation
http://aws.amazon.com/documentation/

ec2 api
http://aws.amazon.com/developertools/351


-----------------------------
DB

SDB
http://awsdocs.s3.amazonaws.com/SDB/latest/sdb-dg.pdf

RDS
http://awsdocs.s3.amazonaws.com/RDS/latest/rds-api.pdf

----------------------------
Messaging

SQS (큐) : application 내부에의 1 component에서 2 component로 전달하는 것.
http://awsdocs.s3.amazonaws.com/SQS/latest/sqs-api.pdf

SNS (noti) : publish/subcribe
http://awsdocs.s3.amazonaws.com/SNS/latest/sns-api.pdf

 

------------------------
Strorage


AWS Import/Export
http://awsdocs.s3.amazonaws.com/ImportExport/latest/AWSImportExport-API.pdf

S3
http://awsdocs.s3.amazonaws.com/S3/latest/s3-api.pdf

 

-----------------------
Identity and access management

http://awsdocs.s3.amazonaws.com/IAM/latest/iam-api.pdf

 

----------------------
billing


Amazon Flexible Payments Service (FPS and ASP)
http://s3.amazonaws.com/awsdocs/FPS/latest/fps-apiref.pdf

DevPay
http://awsdocs.s3.amazonaws.com/DevPay/latest/devpay-dg.pdf

Posted by '김용환'
,

2010년 9월 19일 OracleWorld(javaone) Key Note에서 oracle 사장님이신 "Larry Ellison" 이 Cloud Computing 관련된 내용을 발표했습니다. (주석 6)  오라클/Java/Non-java을 위한 private Cloud appliance인 Oracle Exalogic Elastic Cloud를 만든다는 얘기가 있구요. (동영상 뒤에 서버들을 두며 눈에 띄는 PPT를 해주셨습니다.)

 

Exalogic hardware는 기존의 EC2 스펙과 다른 42U rack을 사용합니다.

1서버 (node)당 사양은  2 6-cores 64-bit x86 processors, ECC DIMM memory, two SSDs, redundant InfiniBand Host Channel Adapters을 사용합니다. 이렇 서버들을 rack에 넣고, 이 rack를 여러대 두는 구조니.. 아주 빵빵하리라 생각됩니다..

 
관련해서 9월 20일 발표한 Exalogi Cloud Specification을 나왔네요. (주석 1)

기존에 Ec2에 대해서 가장 말이 많았던 보안과 성능을 보완한, ec2 기반위에 보안과 성능이슈를 보강하여  Exalogic Elastic Cloud에 대한 얘기가 담겨 있습니다.

 

빵빵한 Rack을 통해서 병렬처리를 통한 성능을 최대한 확보하고, 소프트웨어적으로는 maintain과 managne, monitor, test, deploy에 대한 Manager 툴(Enterprise Manager)을 제공할 것이라고 합니다.

 

기존 시스템보다 훨씬 좋은 낮은 Latency, 높은 Throughput, 빠른 OLTP 등을 기본으로 base로 해서 다양한 PAAS 업무까지 큰 계획를 세우고 있습니다. DB를 포함한 Web 미들웨어들을 포팅할 예정이라고 하며, amazon EC2에서 제공하는 기능 들 (ELB, Auto scaling, Security Groups 등등)도 역시 지원될 예정이라고 하는군요 (주석2) (주석 4) (주석 5)

 

Virtualizaion 기술은 EC2 위에 OVM (Oralce VM, 리눅스의 Xen 같이 virtualization같은 기술) 을 통한 virtualization을 쓸 것이라고 하네요. (주석 2) (주석 3)

 

@ 개인적인 느낌입니다.

Amzone Ec2는 defacto standard가 되어가는 느낌

Oracle이 함 해보고 싶었던 Saleforce.com 같은 회사가 될 것 같은 느낌

 

 

 

주석 1) Exalogic Elastic Cloud White Specification 

    http://www.oracle.com/us/products/middleware/exalogic-wp-173449.pdf

주석 2) AWS Ec2 blog

    http://aws.typepad.com/aws/2010/09/run-oracle-applications-on-amazon-ec2.html

주석 3) Oracle VM

   http://www.oracle.com/us/technologies/virtualization/oraclevm/index.html

주석 4) Oralce Press Release

   http://www.oracle.com/us/corporate/press/173459

주석 5) Exalogic  설명 (KeyNote보다는 조금 더 많은 이야기)

   http://link.brightcove.com/services/player/bcpid62612523001?bctid=610795118001

주석 6) Oracleworld Larry Ellsion Keynote
 http://www.oracle.com/us/javaonedevelop/keynotes-144366.html

Posted by '김용환'
,