Несмотря на то, что я в основном сижу на работе, пытаясь выглядеть занятым , время от времени кто-то врывается в мой офис с вопросом или проблемой, поэтому мне приходится что-то делать.
Интересно, что многие проблемы могут быть решены с помощью довольно простых вещей, таких как напоминание людям о том, что файл .jar / war — это zip-файл, и вы можете заглянуть внутрь, что там есть или чего не хватает; или отправка людей для чтения файлов журналов (оказывается, что эти сообщения действительно содержат полезную информацию) и т. д. — так что теперь для сегодняшнего урока: «Это открытый источник, поэтому источник, вы знаете, открыт…»
В Ницце мы используем много проектов с открытым исходным кодом (мы также постепенно начинаем отдавать что-то сообществу, но это уже другая история). Одним из них является HBase, один из наших разработчиков работал над включением и тестированием сжатия на HBase . Глядя на HBaseAdmin API (на самом деле дескриптор столбца ), он увидел, что есть опция для настройки сжатия семейства колонок и опция для настройки сжатия для сжатия. Вопрос, с которым он пришел, состоял в том, знаю ли я, как он ведет себя, когда вы устанавливаете один, а не другой, и как они работают вместе.
Ну, я знаю о сжатии HBase, но я не слышал о сжатии сжатия, и документации по этому вопросу, ну, в общем, не хватает. К счастью, HBase — проект с открытым исходным кодом, поэтому я взглянул на него. Я начал с hfile.java, который читает и записывает данные HBase в hadoop. ну, кажется, что писатель получает алгоритм сжатия в качестве параметра и что читатель получает алгоритм сжатия из заголовка. так что по существу разные hfiles могут иметь разные сжатия, и HBase не будет заботиться. Мы начинаем видеть картинку, но чтобы убедиться, что нам нужно увидеть, где установлена компрессия. Итак, мы смотрим в файл Store.java регион-сервера и видим:
this.compression = family.getCompression(); // avoid overriding compression setting for major compactions if the user // has not specified it separately this.compactionCompression = (family.getCompactionCompression() != Compression.Algorithm.NONE) ? family.getCompactionCompression() : this.compression;
В итоге, читая код HBase, я смог точно понять, как ведет себя рассматриваемая функция, а также лучше понять внутреннюю работу HBase (HFile описывает свою собственную структуру, поэтому разные файлы могут иметь разные атрибуты, такие как сжатие и т. Д.)
Еще один пример того, как может помочь чтение кода, — это использование метрик библиотеки мониторинга Yammer . Создавая решение для мониторинга для нашей платформы, мы также собираем счетчики JMX (как и все остальные, я думаю :)). Так что я наткнулся на метрики, и руководство хорошо поработало, показав различные функции и объяснив, почему это интересная библиотека. Я попросил одного из наших архитекторов показать его и посмотреть, подходит ли он. Он пытался, но так получилось, что довольно сложно понять, как собрать все воедино, и использовать это на самом деле только из документации. К счастью, в метрическом коде есть модульные тесты (не все, кстати, это позор, но, по крайней мере, этого достаточно), например, следующее (взято отсюда ), которое показывает, как оборудовать сервис джерси:
package com.yammer.metrics.jersey.tests.resources; import com.yammer.metrics.annotation.ExceptionMetered; import com.yammer.metrics.annotation.Metered; import com.yammer.metrics.annotation.Timed; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.io.IOException; @Path("/") @Produces(MediaType.TEXT_PLAIN) public class InstrumentedResource { @GET @Timed @Path("/timed") public String timed() { return "yay"; } @GET @Metered @Path("/metered") public String metered() { return "woo"; } @GET @ExceptionMetered(cause = IOException.class) @Path("/exception-metered") public String exceptionMetered(@QueryParam("splode") @DefaultValue("false") boolean splode) throws IOException { if (splode) { throw new IOException("AUGH"); } return "fuh"; }
Опять же, мы видим, что наличие кода является большим преимуществом. Вам не нужно полагаться на то, что документация завершена (что-то, что мы все делаем так хорошо, но другие люди, пишущие код, этого не делают, вы знаете …) или надеетесь на хорошего самаритянина, который поможет вам при переполнении стека или каких-то других Форум. и это только от чтения кода … представьте, что вы могли бы сделать, если бы вы могли предложить исправления проблем, с которыми вы сталкиваетесь, но, о, подождите, вы можете …
Ладно, я думаю, что на сегодня достаточно, должен вернуться к попытке выглядеть занятым.