https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf

불러오는 중입니다...

 

 

Posted by 김용환 '김용환'

최근에 아는 DBA로부터 들었던 쇼킹한 줄임말


(약자)

최한시 , 최번시



최한시 - busy hour, peak hour, peak busy hour (트래픽이 가장 많은 시간대)

최번시 - idle hour, off-peak hour (트래픽이 가장 적은 시간대)


정보통신기술용어 뿐 아니라 특허, 정책연구원에서 사용하는 단어였다.



한가한 시간, 새벽 작업이라고  했지.


지금까지 개발하면서 한번도 써보지 않은 단어였다..

Posted by 김용환 '김용환'




오늘 트위터 CTO와의 간담회를 마치고 바깥에 나오는데..


점심식사를 같이 하면 좋겠다는 인사팀 수장님이 얘기가 나왔다.





잠깐동안 망설였다.




아.. 내가 트위터 CTO와 밥을!!!   동료와의 점심 식사 약속을 어떻게 하지?


동료와는 다음 주에도 식사할 수 있긴 한데... 어떻게 하지?


으와..










인사팀 수장에게 정중하게 거절하고 동료를 만났다.


(쏘리 트위터 CTO~~)



저녁에 돌아보니.. 나는 미쳤나 보다... 


그런 기회를 놓치다니.. 




그래도 내 동료와 점심 시간 약속을 지켜서.. 그게 참 좋았다. 





Posted by 김용환 '김용환'


debezium을 이용해 CDC(change data caputre) 기능을 접목하려 할 때.  GTID와 binlog 설정에 도움이 되는 설정(테스트 환경 설정)은 다음과 같다.



server-id         = 111

log_bin           = mysql-bin

expire_logs_days  = 1

gtid-mode         = ON

enforce-gtid-consistency = ON

binlog_format     = row
enforce_gtid_consistency  = on

#binlog_cache_size

#max_binlog_size





snapshot 모드를 위해 select, reload, show databases 권한이..

connector 최소 연결을 위해 replication slave, replication client 권한이 필요하다.



GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'debezium' IDENTIFIED BY 'dbz';




참고 


https://github.com/debezium/docker-images/blob/master/examples/mysql/0.8/mysql.cnf


https://dev.mysql.com/doc/refman/5.5/en/replication-options-binary-log.html


https://debezium.io/docs/connectors/mysql/#topic-names

Posted by 김용환 '김용환'


참조할만한 쿠버네티스 자료


2018년 소스콘-ci/cd in k8s


https://www.soscon.net/pdf/day2_1150_2.pdf


https://betsol.com/2018/11/devops-using-jenkins-docker-and-kubernetes/


https://akomljen.com/set-up-a-jenkins-ci-cd-pipeline-with-kubernetes/



Posted by 김용환 '김용환'





대기업에서는 Proxy를  두어 외부 인터넷 연결을 제어한다. 


다만 내부 머신에서 외부 인터넷으로  제대로 패킷이 나가는지 테스트하려면 다음 코드로  테스트한다.



<Proxy.java>



import java.io.*;

import java.net.*;

import java.util.Properties;


public class Proxy {


    public static void main(String[] args) throws Exception {

String url = "http://repo.typesafe.com";


URL server = new URL(url);

HttpURLConnection connection = (HttpURLConnection)server.openConnection();

connection.connect();

InputStream in = connection.getInputStream();


        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];

        int readBytes = -1;


        while((readBytes = in.read(buffer)) > 1){

            baos.write(buffer,0,readBytes);

        }


        byte[] responseArray = baos.toByteArray();

System.out.println(new String(responseArray));


in.close();

    }

}



<사용법>



javac Proxy.javac


java -Dhttp.proxyHost=proxy.google.io -Dhttp.proxyPort=31281   -Dhttps.proxyHost=proxy. google.io  -Dhttps.proxyPort=31281     -Dhttp.nonProxyHosts="localhost|127.*|192.168.*|10.*|172.16.*|*.google.io"  Proxy


Posted by 김용환 '김용환'



구글 논문 - 코드 저장소는 단일화(monolithic)가 좋더라는 내용이 담겨 있다.


https://people.engr.ncsu.edu/ermurph3/papers/seip18.pdf




Posted by 김용환 '김용환'



CDC는 변경 데이터 캡처(Change Data Capture)의 약자로서 다른 소프트웨어가 이러한 변경 사항에 응답 할 수 있도록 데이터의 변경 사항을 모니터링하고 캡처하는 시스템의 오래된 용어이다. 

데이터웨어 하우스에는 CDC 지원 기능이 내장되어 있다. 업스트림 OLTP 데이터베이스에서 데이터가 변경되면 데이터웨어 하우스를 최신으로 유지해야 한다.




대표적으로 Debezium(발음은 디비지움이라 함, https://debezium.io/docs/contribute/)이 요즘 뜨고 있는데.. 기본적으로 다양한 데이터베이스 시스템 모니터링을 지원 하는 현대적이고 분산 된 오픈 소스 변경 데이터 캡처 플랫폼이다.



(https://vladmihalcea.com/a-beginners-guide-to-cdc-change-data-capture/ 참고)




 


<참조 링크 모음>

https://en.wikipedia.org/wiki/Change_data_capture


https://vladmihalcea.com/a-beginners-guide-to-cdc-change-data-capture/



https://medium.com/blablacar-tech/streaming-data-out-of-the-monolith-building-a-highly-reliable-cdc-stack-d71599131acb


https://developers.redhat.com/videos/youtube/QYbXDp4Vu-8/


https://www.youtube.com/watch?v=IOZ2Um6e430&feature=youtu.be


https://techmagie.wordpress.com/2018/04/01/accelerating-data-loading-into-data-lake-using-cdc/



https://www.ridicorp.com/blog/2017/10/30/binlog-collector/



https://www.confluent.io/blog/no-more-silos-how-to-integrate-your-databases-with-apache-kafka-and-cdc


https://www.linkedin.com/pulse/change-data-capture-postgresql-via-debezium-part-1-paolo-scarpino/


https://www.slideshare.net/ceposta/the-hardest-part-of-microservices-your-data



https://wecode.wepay.com/posts/streaming-databases-in-realtime-with-mysql-debezium-kafka


https://debezium.io/blog/2018/12/05/automating-cache-invalidation-with-change-data-capture/


https://www.confluent.io/kafka-summit-sf18/change-data-streaming-patterns-for-microservices-with-debezium


https://engineering.linkedin.com/data-replication/open-sourcing-databus-linkedins-low-latency-change-data-capture-system




<고민꺼리>


CDC를 실제로 구현하기 위한 작업이 만만치 않은 것 같다.


GTID, bin 포맷, 운영이슈(MHA 등), 아키텍처





Posted by 김용환 '김용환'


여러 컨슈머가 동일 토픽에서 메시지를 읽을 때 사용하는 주요 패턴은  다음 2가지이다.


<로드 밸런싱(load balancing)>


각 메시지는 여러 컨슈머 중 특정 컨슈머에 전달된다. 따라서 컨슈머들(컨슈머 그룹)은 해당 토픽의 메시지를 처리하는 작업을 공유한다. 브로커는 메시지를 전달할 컨슈머를 임의로 지정한다. 이 패턴은 메시지를 처리하는 비용이 비싸서 처리를 병렬화하기 위해 컨슈머를 추가하고 싶을 때 유용하다. 또한 컨슈머가 죽으면 관련 컨슈머 그룹에서 나머지 실시간  컨슈머에게 나누어진다.


IBM 문서에 친절히 설명되어 있다.

https://www.ibm.com/support/knowledgecenter/ko/SSCGGQ_1.2.0/com.ibm.ism.doc/Developing/sharedsubscriptionsinjms.html



AMQP는 같은 큐를 소비하는 클라이언트를 여러 개 둬서 로드 밸런싱을 구현할 수 있다. JMS에서는 이 방식을 shared subscription이라 한다. 카프카에서는 load share라고 한다.



<팬 아웃(fan out)>


각 메시지가 모든 컨슈머에 전달된다. 컨슈머가 브로드캐스팅된 동일한 메시지를 서로 간섭없이 들을 수 있다. 


JMS에서는 토픽 구독, AMQP에서는 바인딩 교환이라는 용어를 사용한다. 카프카에서는 팬 아웃이라고 한다.



카프카의 경우, 컨슘될 때 카프카에서 메시지가 제거되지 않아서 소비자를 여럿 추가 할 수 있고 각 컨슈머는 자체 메시지 오프셋을 유지 관리할 수 있습니다. 물론 컨슈머는 서로 다른 컨슈머 그룹에 있어야 한다.





이 두 패턴은 함께 사용할 수 있다.




Posted by 김용환 '김용환'




저장 데이터가 커지면 1대의 장비에 다 저장할 수 없다.


이를 위해 DB에서는 샤딩(sharding)이라는 방식을 사용해 데이터를 분산 저장한다.(사실 플러스로 복제(replica)를 둔다)


hashing, dictionary-hashing, incremental sharding 이렇게 분리한다.



DB 외에 Nosql마다 비슷한 용어를 가지고 있다. 샤딩은 사실 파티션(partition)이라는 일반적인 단어로 포함할 수 있다.



파티션은 일반DB의 샤딩(공식 용어는 아니다),  몽고 DB, 일래스틱서치, 솔라의 샤드(shard)에 해당된다.


HBase에서는 리전(Region), 


구글 Bigtable에서는 테블릿(tablet),


카산드라(Cassandra)와 Riak은 vnode,


Couchbase에서는 vBucket이라 부른다.




Posted by 김용환 '김용환'